downloadTemp2014 2017-01-16 18:18
浏览 60
已采纳

从JSON中排序特定对象

At the moment I'm trying PHP and JSON and I have problems with processing multidimensional arrays, like this one:

{"jsonrpc":"2.0","id":"1","result":[

{"type":"subst","lsid":11544,"lstype":"bs","date":20170116,"startTime":840,"endTime":900,"kl":[],"te":[{"id":205,"orgid":162}],"su":[],"ro":[{"id":121,"name":"HOF 3(2)"}]},

{"type":"subst","lsid":11550,"lstype":"bs","date":20170116,"startTime":840,"endTime":900,"kl":[],"te":[{"id":0,"orgid":172}],"su":[],"ro":[{"id":147,"name":"KAMP Turm"}]},

{"type":"subst","lsid":11554,"lstype":"bs","date":20170116,"startTime":745,"endTime":755,"kl":[],"te":[{"id":145,"orgid":179}],"su":[],"ro":[{"id":110,"name":"HS -A"}]},

{"type":"subst","lsid":11565,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":142,"orgid":196}],"su":[],"ro":[{"id":110,"name":"HS -A"}]},

{"type":"subst","lsid":11576,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":185,"orgid":268}],"su":[],"ro":[{"id":117,"name":"HOF 1"}]},

{"type":"subst","lsid":11581,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":291,"orgid":292}],"su":[],"ro":[{"id":120,"name":"HOF 3(1)"}]},

{"type":"cancel","lsid":11860,"date":20170116,"startTime":1220,"endTime":1315,"kl":[],"te":[{"id":186}],"su":[],"ro":[]},

{"type":"subst","lsid":11040,"date":20170116,"startTime":1400,"endTime":1445,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},

{"type":"subst","lsid":11040,"date":20170116,"startTime":1450,"endTime":1535,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},

{"type":"add","lsid":12051,"date":20170116,"startTime":1315,"endTime":1620,"txt":"FK DaZ","kl":[],"te":[{"id":155},{"id":193},{"id":195},{"id":205},{"id":206},{"id":299}],"su":[],"ro":[]},

]}

What I would like to have is:

{"jsonrpc":"2.0","id":"1","result":[
    {"type":"subst","lsid":11040,"date":20170116,"startTime":1400,"endTime":1445,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},
    {"type":"subst","lsid":11040,"date":20170116,"startTime":1450,"endTime":1535,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]}   

]}

So only the objects that have the kl object with id 240, should be displayed.

Thanks for the help.

  • 写回答

1条回答 默认 最新

  • douji4948 2017-01-16 18:47
    关注

    There is error in your JSON and it giving error while converting JSON to Php array

    {"type":"add","lsid":12051,"date":20170116,......},
                                                      ^ remove semicolon
    

    and final code will be

    <?php
    $arr = '{"jsonrpc":"2.0","id":"1","result":[{"type":"subst","lsid":11544,"lstype":"bs","date":20170116,"startTime":840,"endTime":900,"kl":[],"te":[{"id":205,"orgid":162}],"su":[],"ro":[{"id":121,"name":"HOF 3(2)"}]},{"type":"subst","lsid":11550,"lstype":"bs","date":20170116,"startTime":840,"endTime":900,"kl":[],"te":[{"id":0,"orgid":172}],"su":[],"ro":[{"id":147,"name":"KAMP Turm"}]},{"type":"subst","lsid":11554,"lstype":"bs","date":20170116,"startTime":745,"endTime":755,"kl":[],"te":[{"id":145,"orgid":179}],"su":[],"ro":[{"id":110,"name":"HS -A"}]},{"type":"subst","lsid":11565,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":142,"orgid":196}],"su":[],"ro":[{"id":110,"name":"HS -A"}]},{"type":"subst","lsid":11576,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":185,"orgid":268}],"su":[],"ro":[{"id":117,"name":"HOF 1"}]},{"type":"subst","lsid":11581,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":291,"orgid":292}],"su":[],"ro":[{"id":120,"name":"HOF 3(1)"}]},{"type":"cancel","lsid":11860,"date":20170116,"startTime":1220,"endTime":1315,"kl":[],"te":[{"id":186}],"su":[],"ro":[]},{"type":"subst","lsid":11040,"date":20170116,"startTime":1400,"endTime":1445,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},{"type":"subst","lsid":11040,"date":20170116,"startTime":1450,"endTime":1535,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},{"type":"add","lsid":12051,"date":20170116,"startTime":1315,"endTime":1620,"txt":"FK DaZ","kl":[],"te":[{"id":155},{"id":193},{"id":195},{"id":205},{"id":206},{"id":299}],"su":[],"ro":[]}]}';
    
    //convert json tp php array
    $arr = json_decode($arr, true);
    $i = 0;
    foreach($arr['result'] as $itr){
        if(count($itr['kl']) == 1){
            if($itr['kl'][0]['id'] != 240){
                //remove index which doesn't contain kl with id 240
                unset($arr['result'][$i]);
            }
        } else {
            //remove index which doesn't contain kl with id
            unset($arr['result'][$i]);
        }
        $i = $i+1;
    }
    //re index array from the beginning
    $arr['result'] = array_values($arr['result']);
    echo json_encode($arr);
    ?>
    

    output

    {"jsonrpc":"2.0","id":"1","result":[{"type":"subst","lsid":11040,"date":20170116,"startTime":1400,"endTime":1445,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},{"type":"subst","lsid":11040,"date":20170116,"startTime":1450,"endTime":1535,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]}]}
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口