我正在开发使用weatherapi网站。我打算使用citylist中的cityid获取天气。json文件。用户将输入城市名称,我希望从这个json中提取cityid,并使用cityid使用API获取天气。但是JSON中有一些错误。
if (file_exists('citylist.json')) {
$cityArray = file_get_contents("citylist.json");
$cityAA = json_decode($cityArray,true);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
print_r($cityAA);
}
JSON大约是12MB。这里是前几行
{
"_id": 14256,
"coord": {
"lon": 48.570728,
"lat": 34.790878
},
"country": "IR",
"geoname": {
"cl": "P",
"code": "PPL",
"parent": 132142
},
"langs": [{
"de": "Azad Shahr"
},
{
"fa": "آزادشهر"
}],
"name": "Azadshahr",
"stat": {
"level": 1.0,
"population": 514102
},
"stations": [{
"id": 7030,
"dist": 9,
"kf": 1
}],
"zoom": 10
}{
"_id": 18918,
"coord": {
"lon": 34.058331,
"lat": 35.012501
},
"country": "CY",
"geoname": {
"cl": "P",
"code": "PPL",
"parent": 146615
},
"langs": [{
"en": "Protaras"
},
{
"ru": "Протарас"
}],
"name": "Protaras",
"stat": {
"level": 1.0,
"population": 20230
},
"stations": [{
"id": 5448,
"dist": 42,
"kf": 1
}],
"zoom": 6
}
我试过jsonlint,但文件太大了,我猜。var_dump提示语法错误,格式错误的JSON。我不能发布图像,因为我不允许。
我怎样才能找到json格式不正确的地方?
5条答案
按热度按时间jljoyd4f1#
本网站可以帮助您:http://jsonlint.com/
在提供的示例中,您不能像以前那样只传递2个对象。你需要把它放在一个数组中。
固定:
gxwragnw2#
看起来文件包含多个JSON对象,但没有很好地集成。
这是有效的JSON:
这也是:
但它们是如何组合在一起的,就不是了。这可能是导入的JSON文件的问题,或者是您自己从API生成的问题。
一个有效的JSON将像这些对象的数组一样形成:
PS:你可以使用http://jsonlint.com/来检查有效的JSON。
bbmckpt73#
我尝试使用下面的函数将JSON文件转换为多个JSON片段的数组
但这并不起作用,下面是生成的拆分数组,但它没有在片段之间放置逗号(,)。
我在考虑使用用户输入的$city变量获取“_id”
ljo96ir54#
因此JSON文件确实不正确,我不得不使用str_replace()并使用file_put_contents()编写文件,以创建一个新的有效的JSON文件。
这是我的工作代码
qvsjd97n5#
如果json包含你不想发布到网上的信息,你可以使用jq。--stream“json_filename”,查看jq在处理过程中失败的地方。它可能是jq输出的倒数第二个字段,您发现错误。