2013-07-23 3 views
0

Я пытаюсь разобрать этот json '{"options":"[{\"order\":\"1\"},{\"skill\":\"\\n wajghjk \"},{\"order\":\"2\"},{\"skill\":\"\\n aswedrty \"},{\"order\":\"3\"},{\"skill\":\"\\n skill1 \"},{\"order\":\"4\"},{\"skill\":\"\\n wasedjk \"},{\"order\":\"5\"},{\"skill\":\"\\n Feldsher \"},{\"order\":\"6\"},{\"skill\":\"\\n wasedjk \"},{\"order\":\"7\"},{\"skill\":\"\\n Autotransfusionist \"},{\"order\":\"8\"},{\"skill\":\"\\n Feldsher \"},{\"order\":\"9\"},{\"skill\":\"\\n Autotransfusionist \"}]"}'. используя кодКак разобрать json в php?

<?php 
$json = '{"options":"[{\"order\":\"1\"},{\"skill\":\"\\n      wajghjk     \"},{\"order\":\"2\"},{\"skill\":\"\\n      aswedrty     \"},{\"order\":\"3\"},{\"skill\":\"\\n      skill1     \"},{\"order\":\"4\"},{\"skill\":\"\\n      wasedjk     \"},{\"order\":\"5\"},{\"skill\":\"\\n      Feldsher     \"},{\"order\":\"6\"},{\"skill\":\"\\n      wasedjk     \"},{\"order\":\"7\"},{\"skill\":\"\\n      Autotransfusionist     \"},{\"order\":\"8\"},{\"skill\":\"\\n      Feldsher     \"},{\"order\":\"9\"},{\"skill\":\"\\n      Autotransfusionist     \"}]"}'; 

$decode = json_decode($json, true); 
$a=array(); 
echo '<br/>'; 
foreach($decode['options'] as $a) 
{ 
    echo $a['order'];echo '<br/>'; 
    echo $a['skill'];echo '<br/>'; 
} 
?> 

Но он показывает ошибку и не может разобрать. Есть ли лучший способ получить значения порядка и навыков от этого json?

+1

Какая ошибка у вас возникла? –

+0

Не могли бы вы связать ошибку? – Parrotmaster

+1

Вы должны удалить обратную косую черту – krampstudio

ответ

1

Вы избегаете двойных кавычек, которые выходят как буквальные символы \, когда строка разделяется одинарными кавычками.

Либо запустите stripslashes на строку json, либо избегите экранирования в первую очередь.

3

Это не JSON. Вы избегаете слишком много двойных кавычек.

+1

Проверьте это, чтобы узнать, есть ли у вас действующий JSON или нет: http://json.parser.online.fr/ – Zim84

+1

проверьте json здесь. http://jsonlint.com/ –

1

У вас есть две проблемы с json-строкой.

  1. Вы избегаете двойных кавычек внутри строки с одной кавычкой. Но однокасканная строка имеет только одну escape-последовательность, а это \. Check this article.
  2. У вас есть проблема: '{"options":"[{...}]"}'. Вы заключили javascript [массив] с кавычками, которые превратили его в строку.

Правильный JSON должен выглядеть следующим образом:

{"options":[{"order":"1"},{"skill":"\\n wajghjk "},{"order":"2"},{"skill":"\\n aswedrty "},{"order":"3"},{"skill":"\\n skill1 "},{"order":"4"},{"skill":"\\n wasedjk "},{"order":"5"},{"skill":"\\n Feldsher "},{"order":"6"},{"skill":"\\n wasedjk "},{"order":"7"},{"skill":"\\n Autotransfusionist "},{"order":"8"},{"skill":"\\n Feldsher "},{"order":"9"},{"skill":"\\n Autotransfusionist "}]} 

Eval.in demo

1

он показывает ошибку и не смог разобрать.

PHP довольно слаб в отладке json. Все, что вы можете сделать, это

$json_errors = array(
    "", 
    "The maximum stack depth has been exceeded", 
    "Invalid or malformed JSON", 
    "Control character error, possibly incorrectly encoded", 
    "Syntax error", 
    "Malformed UTF-8 characters, possibly incorrectly encoded", 
); 

$decode = json_decode($json, true); 
if ($error = json_last_error()) 
{ 
    trigger_error($json_errors[$error]); 
} 

Хотя для того, чтобы получить значение, которые вы должны иметь действительную строку JSON, а не просто произвольная строка состоит из нескольких цитат и косой черты.

И, конечно, вы должны никогда не создать строку json вручную.

Смежные вопросы