JSON необходимо заключить все ключи в кавычки, поэтому:
"{empty: false, ip: true}"
не является допустимым JSON.Вам нужно предварительно обработать его, чтобы иметь возможность проанализировать этот JSON.
function preprocessJSON(str) {
return str.replace(/("(\\.|[^"])*"|'(\\.|[^'])*')|(\w+)\s*:/g,
function(all, string, strDouble, strSingle, jsonLabel) {
if (jsonLabel) {
return '"' + jsonLabel + '": ';
}
return all;
});
}
(Попробуйте на JSFiddle) Он использует простое регулярное выражение для замены слова, за которым следует двоеточиес этим словом, заключенным в двойные кавычки.Регулярное выражение не будет заключать в кавычку метку внутри других строк.
Тогда вы можете безопасно
data = JSON.parse(preprocessJSON(json));