用php修改JSON提要
我有一个由api访问的JSON提要。 它返回的json提要如下所示:用php修改JSON提要,php,json,Php,Json,我有一个由api访问的JSON提要。 它返回的json提要如下所示: [ { "isoDate":"2017-09-15T00:00:00.0000000", "events":[ { "id":"-7317", "name":"Exhibition SKMU: The collection 2015-2017", }, {
[
{
"isoDate":"2017-09-15T00:00:00.0000000",
"events":[
{
"id":"-7317",
"name":"Exhibition SKMU: The collection 2015-2017",
},
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
]
},
{
"isoDate":"2017-09-16T00:00:00.0000000",
"events":[
{
"id":"-7317",
"name":"Exhibition SKMU: The collection 2015-2017",
},
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
]
}
]
我需要将isoDate与每个事件一起列出,而不是单独列出。
e、 g
这可以通过php实现吗?基本上从url获取提要,然后以我喜欢的格式显示它?您可以使用json_decode将json对象解码为php数组,然后修改数组并使用json_encode对其进行编码您可以使用json_decode将json对象解码为php数组,然后修改数组并使用json_encode对其进行编码使用函数,例如:
$yourjson;/* your json */
$events = json_decode($yourjson, true);
foreach($events as $event){
echo $event["isoDate"];
}
是,您可以使用函数,例如:
$yourjson;/* your json */
$events = json_decode($yourjson, true);
foreach($events as $event){
echo $event["isoDate"];
}
所以这就是你要做的,要得到你想要的json格式,
$json
是您的json字符串:
$eventList = json_decode($json);
foreach($eventList as $eventEntry){
$isoDate = $eventEntry->isoDate;
foreach($eventEntry->events as $subEventEntry){
$subEventEntry->isoDate = $isoDate;
}
//delete the isoDate from outer
unset($eventEntry->isoDate);
}
echo json_encode($eventList);
因此,基本上,您首先将json解码为php结构,应用更改,然后对其进行编码。请注意,我没有将true
作为$json\u decode
的第二个参数,而是使用结果对象
另外:您的json不是标准格式,可能会导致错误。PHP不会正确地对其进行解码,因为对象以逗号结尾。对象的最后一个元素不应包含逗号。而不是
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
这样做:
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo"
}
我知道,这可能是一个问题,当你从一个API得到它时,但这本身就是另一个问题
编辑:
要将每个“事件”放入一个大数组,您必须像您的想象一样存储它们;)。如下所示:$subEventEntry
包含一个“事件”-对象。因为您正在迭代这两个级别,所以可以看到每个人都是它们的对象。我的建议是将它们存储在一个新的数组中,并围绕该数组重新创建结构:
$everything = new stdClass();
$everything->events = array();
然后,在内部循环中:
foreach($eventList as $eventEntry){
$isoDate = $eventEntry->isoDate;
foreach($eventEntry->events as $subEventEntry){
$subEventEntry->isoDate = $isoDate;
$everything->events[] = $subEventEntry; // <-- this has to be added
}
//delete the isoDate from outer
unset($eventEntry->isoDate);
}
foreach($eventList作为$eventEntry){
$isoDate=$eventEntry->isoDate;
foreach($eventEntry->events as$subEventEntry){
$subEventEntry->isoDate=$isoDate;
$everything->events[]=$subEventEntry;//isoDate);
}
当重新创建结构时,您不再需要旧结构,您可以删除unset
请记住,json中的每个
[]
对表示一个数组,每个{}
对表示一个对象(stdClass
)。此对象/数组的名称在superobject中由其class属性引用。->。因此,要获得所需的json格式,您必须这样做,
$json
是您的json字符串:
$eventList = json_decode($json);
foreach($eventList as $eventEntry){
$isoDate = $eventEntry->isoDate;
foreach($eventEntry->events as $subEventEntry){
$subEventEntry->isoDate = $isoDate;
}
//delete the isoDate from outer
unset($eventEntry->isoDate);
}
echo json_encode($eventList);
因此,基本上,您首先将json解码为php结构,应用更改,然后对其进行编码。请注意,这里我没有将true
作为$json\u decode
的第二个参数,而是使用生成的对象
另外:您的json不是标准的comform格式,可能会导致错误。PHP不会正确解码它,因为您的对象以逗号结尾。对象的最后一个元素应该不带逗号。而不是
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo",
}
这样做:
{
"id":"-91417",
"name":"Torget - a multi cultural meeting place in Geilo"
}
我知道,这可能是一个问题,当你从一个API得到它时,但这本身就是另一个问题
编辑:
要将每个“事件”存储到一个大数组中,你必须像你想象的那样存储它们;)。这样想:$subEventEntry
包含一个“事件”-对象。因为你在迭代这两个级别,你会看到每个人都是它们的对象。我的建议是将它们存储在一个新数组中,并围绕它重新创建结构:
$everything = new stdClass();
$everything->events = array();
然后,在内部循环中:
foreach($eventList as $eventEntry){
$isoDate = $eventEntry->isoDate;
foreach($eventEntry->events as $subEventEntry){
$subEventEntry->isoDate = $isoDate;
$everything->events[] = $subEventEntry; // <-- this has to be added
}
//delete the isoDate from outer
unset($eventEntry->isoDate);
}
foreach($eventList作为$eventEntry){
$isoDate=$eventEntry->isoDate;
foreach($eventEntry->events as$subEventEntry){
$subEventEntry->isoDate=$isoDate;
$everything->events[]=$subEventEntry;//isoDate);
}
当重新创建结构时,您不再需要旧结构,您可以删除unset
请记住,json中的每个
[]
对表示一个数组,每个{}
对表示一个对象(stdClass
)这个对象/数组的名称由SubObjor中的class属性引用<代码> > ->代码> .Y.P.可以,首先必须对JSON进行解码以获得数组,然后可以尝试循环该数组。是的,可以先解码JSON获得数组,然后可以尝试循环该数组。将ameter改为json\u decode()
,使其成为php数组而不是stdClass。json\u decode($yourjson,true)
。关于这方面的更多信息可以在我的回答中看到,实际上,stdClass
会很好。记住用->
修改对象。之后,你甚至可以用相同的数组/对象结构对其进行编码。@FabianN。是的,不要害怕stdClass
!使用它,它是为了一个reason。请看我的答案。您应该将true
参数添加到json\u decode()
,使其成为php数组而不是stdClass。json\u decode($yourjson,true)
。关于这方面的更多信息可以在我的回答中看到,实际上,stdClass
会很好。记住用->
修改对象。之后,你甚至可以用相同的数组/对象结构对其进行编码。@FabianN。是的,不要害怕stdClass
!使用它,它是为了一个r请看我的答案。这个答案可以简化为:“是的”,甚至“你可以使用php”,因为你的答案实际上没有解释任何事情。这个答案可以简化为:“是的”,甚至“你可以使用php”因为你的答案实际上没有解释任何事情。谢谢-这很好-json格式还可以-我在粘贴这里时删除了那些逗号,因为这里有很多多余的不必要的行。是否可以将所有这些事件合并到1 events节点下:“events”:[是的,请参阅我的编辑]