我正在使用的API格式化其JSON,而没有对对象值使用KEY
。它的格式更像一个数组。作为参考,这是我尝试使用https://opensky-network.org/apidoc/rest.html的API的链接。以下是JSON外观的示例。
错误的示例
{
"time": 1535758880,
"states": [
[
"First",
"A"
],
[
"Second",
"B"
]
]
}
上面的JSON对于每个对象也都有方括号。在我的情况下这不起作用。他们需要改为大括号。以下是我要实现的示例。请注意,对象括号是卷曲的,并且每个值都有一个键。
所需示例
{
"time": 1535758880,
"states": [
{
"id": "First",
"content": "A"
},
{
"id": "Second",
"content": "B"
}
]
}
这是我当前正在编写的用于在JSON中查找值的代码。
<?php
$str = '
{
"time": 1535758880,
"states": [
{
"id": "First" ,
"content": "A"
},
{
"id": "Second" ,
"content": "B"
}
]
}';
$json = json_decode($str);
foreach($json->states as $item)
{
if($item->id == "Second")
{
echo $item->content;
}
}
?>
我的总体问题是,如何在我的JSON中添加id
和content
并用大括号替换每个对象的方括号?我在想我需要以某种方式执行str_replace()。但是我不确定如何解决这个问题。
答案 0 :(得分:1)
您需要重铸数组,然后将其重新编码回json。像这样:
$formatted = json_decode($str);
foreach ($formatted->states as $key => $value) {
$tmp = array(
'id' => $value[0],
'content' => $value[1]
);
$formatted->states[$key] = $tmp;
}
// If you want this in array format you are done here, just use $formatted.
// If you want this back in json format, then json_encode it.
$str = json_encode($formatted);
答案 1 :(得分:0)
绝对不要尝试替换字符串。
首先,我会问您是否真的需要从数组到对象的转换。 $item[0]
并不比$item->id
差很多。如果确实需要,可以使代码更明显,并为索引创建变量。
$id = 0;
$content = 1;
if ($item[$id] == 'Second') {
echo $item[$content];
}
但是,如果由于某种原因您不得不转换,则可以使用上面mopsyd帖子中的代码