JSON Получить имя динамически изменяемого ключа с помощью PHP - PullRequest
0 голосов
/ 10 октября 2019

У меня проблемы с получением имени динамического ключа из строки JSON. Я использую PHP

Это пример JSON

{
"_text": "this is a test",
"entities": {
    "dynamic_key": [
        {
            "confidence": 0.99,
            "value": "thi is the answer"
        }
    ]
},
"msg_id": "1234532123"
}

Я использую foreach, чтобы пройти через ключ json и получить значения

foreach ($json as $obj) {
        $search_term = $obj->_text;
        $msg_id = $obj->msg_id;
    }

НоЯ не уверен, как получить значение «dynamic_key», которое меняется каждый раз, и из-за этого я также не могу получить значения ключей «доверие и значение».

Любые идеи о том, как подойти к этому?

Вслед за @Dimi, решение. Это то, что я закончил с

$data=json_decode($json,true);

foreach ($data['entities'] as $key=>$val)
{
echo "Entity: $key";

    foreach ($data['entities'] as $keys){
        $conf = $keys[0]['confidence'];
        $answer = $keys[0]['value'];
        echo "conf: $conf, answ: $answer";
    }
}

Ответы [ 3 ]

1 голос
/ 10 октября 2019

Можете ли вы привести еще пару примеров? Или попробуйте этот код и дайте нам знать, если он сломается

<?php

$json='{
"_text": "this is a test",
"entities": {
    "dynamic_key": [
        {
            "confidence": 0.99,
            "value": "thi is the answer"
        }
    ]
},
"msg_id": "1234532123"
}';


$data=json_decode($json,true);

foreach ($data['entities'] as $key=>$val)
{
echo "VALUE IS $key\n values are ";
var_dump($val);


}
1 голос
/ 10 октября 2019

Если вы декодируете JSON как массив и если динамический ключ является единственным ключом в entities, то:

$array = json_decode($json, true);
$dynamic = current($array['entities']);
$confidence = $dynamic['confidence'];
$value = $dynamic['value'];

или короче:

$confidence = current($array['entities'])['confidence'];

Вы можетевероятно, используйте reset, current и, возможно, array_pop и т. д.

1 голос
/ 10 октября 2019

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

Но с этими данными следующее будет использовать foreach для извлечения ключа и данных, а затем еще один суб-цикл для извлечения значения confidence ...

$search_term = $json->_text;
$msg_id = $json->msg_id;
foreach ( $json->entities as $key => $entities )    {
    echo $key.PHP_EOL;
    foreach ( $entities as $entity) {
        echo $entity->confidence.PHP_EOL;
    }
}
...