Проблема с анализом неверных данных json_decode в php - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно проанализировать данные и извлечь идентификатор, имя пользователя, телефон из файла JSON, который может быть недействительным JSON

Пример данных

 {""_"":""user"",""pFlags"":{""contact"":true},""flags"":2167,""id"":898989898,""access_hash"":""18303077651576387045"",""first_name"":""خشايار"",""last_name"":""هوروشي"",""phone"":""98203920399"",""photo"":{""_"":""userProfilePhoto"",""photo_id"":""1680040805486667797"",""photo_small"":{""_"":""fileLocation"",""dc_id"":4,""volume_id"":""455220331"",""local_id"":324641,""secret"":""3560097151242861840""},""photo_big"":{""_"":""fileLocation"",""dc_id"":4,""volume_id"":""455220331"",""local_id"":324643,""secret"":""4435530174476586386""}},""status"":{""_"":""userStatusRecently""}}"
{""_"":""user"",""pFlags"":{""contact"":true},""flags"":2103,""id"":9898989,""access_hash"":""10869201313646751836"",""first_name"":""هيرمند"",""last_name"":""فرزيني"",""phone"":""983049230490"",""photo"":{""_"":""userProfilePhoto"",""photo_id"":""2959023925263181761"",""photo_small"":{""_"":""fileLocation"",""dc_id"":4,""volume_id"":""455007904"",""local_id"":261742,""secret"":""351822579494173465""},""photo_big"":{""_"":""fileLocation"",""dc_id"":4,""volume_id"":""455007904"",""local_id"":261744,""secret"":""10983018442547226810""}}}"
{""_"":""user"",""pFlags"":{""contact"":true},""flags"":2167,""id"":9898989,""access_hash"":""10275071461967699194"",""first_name"":""داراب"",""last_name"":""فرزادي"",""phone"":""98901230910239"",""photo"":{""_"":""userProfilePhoto"",""photo_id"":""459395887189305518"",""photo_small"":{""_"":""fileLocation"",""dc_id"":4,""volume_id"":""455218467"",""local_id"":301592,""secret"":""9369292746617292051""},""photo_big"":{""_"":""fileLocation"",""dc_id"":4,""volume_id"":""455218467"",""local_id"":301594,""secret"":""13207755334439052246""}},""status"":{""_"":""userStatusOffline"",""was_online"":1564490108}}"
{""_"":""user"",""pFlags"":{""contact"":true},""flags"":2175,""id"":9898989,""access_hash"":""7793004574865111260"",""first_name"":""سوگند"",""last_name"":""شهرياري"",""username"":""Faflnasdasd"",""phone"":""98923821938"",""photo"":{""_"":""userProfilePhoto"",""photo_id"":""887478700670560930"",""photo_small"":{""_"":""fileLocation"",""dc_id"":4,""volume_id"":""455031395"",""local_id"":340581,""secret"":""15371281078852372263""},""photo_big"":{""_"":""fileLocation"",""dc_id"":4,""volume_id"":""455031395"",""local_id"":340583,""secret"":""2021643051882888603""}},""status"":{""_"":""userStatusOffline"",""was_online"":1567390764}}"

Пример кода

parseData($input) {

    // Some code to extract specific data from invalid JSON

    return $data;
}

$string = file_get_contents("test.json");

$arr = parseData(json_decode(utf8_encode($string), true));

$s=0;

foreach($arr as $item=> $value){
    $s=count($value); // WIN
}

echo $s;

1 Ответ

0 голосов
/ 09 апреля 2020

Если вы протестируете json в каком-либо инструменте из ворса, таком как https://jsonlint.com/, вы увидите ошибку, и первая ошибка - двойная кавычка "" для определения параметров.

После удаления двойных кавычек возникает ошибка разделения объектов {}. Для каждого объекта вам нужно запятую, например {},{},{}

И последняя ошибка - у вас много объектов, и для правильной работы вам необходимо поместить объекты в массив, например [{},{},{}]

Я сделал пример возможного решения для ваших образцов данных

[
{"_": "user","pFlags": {"contact": true},"flags": 2167,"id": 898989898,"access_hash": "18303077651576387045","first_name": "خشايار","last_name": "هوروشي","phone": "98203920399","photo": {"_": "userProfilePhoto","photo_id": "1680040805486667797","photo_small": {"_": "fileLocation","dc_id": 4,"volume_id": "455220331","local_id": 324641,"secret": "3560097151242861840"},"photo_big": {"_": "fileLocation","dc_id": 4,"volume_id": "455220331","local_id": 324643,"secret": "4435530174476586386"}},"status": {"_": "userStatusRecently"}}
,{"_": "user","pFlags": {"contact": true},"flags": 2103,"id": 9898989,"access_hash": "10869201313646751836","first_name": "هيرمند","last_name": "فرزيني","phone": "983049230490","photo": {"_": "userProfilePhoto","photo_id": "2959023925263181761","photo_small": {"_": "fileLocation","dc_id": 4,"volume_id": "455007904","local_id": 261742,"secret": "351822579494173465"},"photo_big": {"_": "fileLocation","dc_id": 4,"volume_id": "455007904","local_id": 261744,"secret": "10983018442547226810"}}}
,{"_": "user","pFlags": {"contact": true},"flags": 2167,"id": 9898989,"access_hash": "10275071461967699194","first_name": "داراب","last_name": "فرزادي","phone": "98901230910239","photo": {"_": "userProfilePhoto","photo_id": "459395887189305518","photo_small": {"_": "fileLocation","dc_id": 4,"volume_id": "455218467","local_id": 301592,"secret": "9369292746617292051"},"photo_big": {"_": "fileLocation","dc_id": 4,"volume_id": "455218467","local_id": 301594,"secret": "13207755334439052246"}},"status": {"_": "userStatusOffline","was_online": 1564490108}}
,{"_": "user","pFlags": {"contact": true},"flags": 2175,"id": 9898989,"access_hash": "7793004574865111260","first_name": "سوگند","last_name": "شهرياري","username": "Faflnasdasd","phone": "98923821938","photo": {"_": "userProfilePhoto","photo_id": "887478700670560930","photo_small": {"_": "fileLocation","dc_id": 4,"volume_id": "455031395","local_id": 340581,"secret": "15371281078852372263"},"photo_big": {"_": "fileLocation","dc_id": 4,"volume_id": "455031395","local_id": 340583,"secret": "2021643051882888603"}},"status": {"_": "userStatusOffline","was_online": 1567390764}}
]
...