JSON DECODE Проблема с образцом анализа массива - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь ввести строки json как: http://prntscr.com/kt8i8a

{"0":168,"1":168}

{"168":1,"168":2}

{"168":70000,"168":80000}

Моя цель - получить 2 значения с id = 168 для сохранения в БД при использовании json_decode('{"168":1,"168":2}',true) Я получаю результат сединственное значение:

array:1 [
  168 => 2
]

Сколько способов разобрать полные значения ?, спасибо

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

В вашем случае, я надеюсь, вы сможете изменить формат закодированного json, добавив некоторую дополнительную информацию, чтобы сделать его многомерным массивом. Есть разные способы иметь один и тот же ключевой индекс с разным значением, и один из них может быть таким:

{"data":
  [
    {"168":"1"},{"168":"2"}
  ]
}

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

0 голосов
/ 11 сентября 2018

Это недопустимый синтаксис JSON, попробуйте исправить его.

Если вы не можете, потому что вы не можете повлиять на API, потому что вы не разработали его, вы можете попробовать его через анализ регулярных выраженийкак это:

<?php
//print out the result
var_dump(getInvalidCustomJson('{"0":168,"1":168}'));

function getInvalidCustomJson($json){
    $res = array(); // result array which get returned
    preg_match_all('/"([0-9]+)".([0-9]+)/m',$json, $result, PREG_PATTERN_ORDER); // matching a key between "..." and a value which get send afterwards
    for($i = 0; $i < count($result[0]); $i++){ // go through all results
        $std = array();
        $std[$result[1][$i]] = $result[2][$i]; // insert key and value from the groups into the array
        $res[] = $std; // add the array to the result array
        // $res[$result[1][$i]] = $result[2][$i]; wont work because it will
        // overwrite the key like json decoder does
    }
    return $res; // return array
}
?>
0 голосов
/ 11 сентября 2018

Ключи в объектах / словарях уникальны, поэтому значение последнего ключа будет окончательным и заменяет все остальные значения до этого.

Два решения: либо поместить два объекта в массив:

[
    {
        "168": "1"
    },
    {
        "168": "2"
    }
]

, либо иметь объект с ключом 168 с двумя значениями:

{
    "168": [
        "1",
        "2"
    ]
}
...