Получить данные из JSON - PullRequest
0 голосов
/ 28 мая 2018

У меня есть XML, который я анализирую в JSON и помещаю в массив.Итак, я получил следующее:

{
    "result": {
        "stats": {
            "count":"0"
        }
    }
}

Но я не могу получить данные из массива, пытаясь сделать следующее:

$yummy = json_decode($json);
echo $yummy->count; //0

Спасибо за вашу помощь

Ответы [ 4 ]

0 голосов
/ 31 мая 2018

Преобразование XML в JSON означает, что вы потеряете информацию и функции.Конвертация не нужна, на самом деле.SimpleXML предоставляет сопоставимый синтаксис, в то время как с DOM вы можете использовать выражения Xpath.

$xml = <<<'XML'
<response>
  <result>
    <stats>
      <count>21</count>
    </stats>
  </result>
</response>
XML;

// SimpleXML maps elements to properties
$response = new SimpleXMLElement($xml);
var_dump(
  (int)$response->result->stats->count
);

// DOM can use Xpath expressions to extract values
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
var_dump(
  $xpath->evaluate('number(/response/result/stats/count)')
);

Вывод:

int(21)
float(21)
0 голосов
/ 28 мая 2018

Вы можете использовать онлайновый валидатор json , чтобы убедиться, что ваш проанализированный json верен.

0 голосов
/ 28 мая 2018

Функция json_decode возвращает смешанную переменную, вы можете заставить ее вернуть ассоциативный массив, передав второй аргумент true:

$yummy = json_decode($json, true);

Затем выможет получить доступ к вашим значениям как в массиве: echo $yummy['result']['stats']['count'];

0 голосов
/ 28 мая 2018

Объект имеет только одно свойство, и оно называется result, а не count.

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

...