У меня есть массив с несколькими элементами, одним из которых является уже закодированная строка JSON. Я хочу, чтобы json кодировал весь массив, но при этом он повторно json_encodes json и добавляет косые черты к нему. Единственный способ исправить это — json_decode значения, а затем кодировать весь массив. Я чувствую, что это пустая трата ресурсов, и я чувствую, что должен быть лучший путь. Делать это таким образом наилучшим образом?
Вот пример массива, который я пытаюсь json_encode.
$arr = array();
$arr["var1"] = '{"test":"test"}';
$arr["var2"] = 'foo';
$arr["var3"] = 'bar';
Если я сначала не декодирую var1 и просто кодирую весь массив, я получаю результат примерно так
{"var1":"{\"test\":\"test\"}","var2":"foo","var3":"bar"}
Обратите внимание на косые черты в объекте json.
json_encode()
возвращает строку, содержащую json-представление значения.
В примере строка php передается как один элемент массива '{"test":"test"}'
таким образом json_encode()
соответственно кодирует его в формат json, с экранированными кавычками "{\"test\":\"test\"}"
,
Если декодирование вложенного json является очень трудоемкой задачей, обходной путь должен использовать заполнитель вместо значения, {"var1":"PLACEHOLDER","var2":"foo","var3":"bar"}
, а затем с помощью str_replace()
заменить его.
Однако простое декодирование, как вы описали, вероятно, является более чистым решением, если оно не требует значительных ресурсов.
Других решений пока нет …