用php修改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", }, {

我有一个由api访问的JSON提要。 它返回的json提要如下所示:

[  
   {  
      "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”:[是的,请参阅我的编辑]