通过PHP访问JSON中的数据

时间:2017-08-21 00:02:13

标签: php json icalendar

我正在尝试从数据库访问通过目录服务生成的数据,创建通过JSON编码发送到网站的ics文件。

生成多个文件或未知数量。我现在的主要问题是,我需要将JSON文件中的信息解析回ics文件。

目前我所困扰的是阅读JSON文件中的信息。

JSON文件是这样的:

{
  "SMSDATA": {
      "date": 20170817062448,
      "person": {
          "data":[{
             "person": 321654978,
             "information": "person information"
          },{
             "person": 3216549,
             "information": "person information"
          }]
}}

我要做的是深入挖掘并将personinformation数据输出到ics文件中。

我目前在PHP中只是显示数据以查看我是否正在访问正确的数据:

    $str = '../filename/test.json'; // The location of the files
    $contents = file_get_contents($str);  // get the information from the file
    $decode = json_decode($contents, true); // Creates the JSON as an array

    //array loop
    foreach($decode as $key => $value){
    echo $value["person"]. " -> " . $value["information"]. "<br>"; // Should display the information needed
    print_r ($value);  // test dump of data
}

我很清楚我没有深入挖掘。我发现这个资源非常有用:How do I extract data from JSON with PHP?,以及Convert and Loop through JSON with PHP and JavaScript Arrays/Objects。我也相信ICal Parser会很有用,但不知道如何在这个阶段使用它。

我想确保我现在正在阅读正确的数据,然后下一步将使用人员和信息数据创建.ics文件。

谢谢大家的帮助。

(顺便说一句,我只用了几个月的PHP)

2 个答案:

答案 0 :(得分:3)

你是对的,你没有在正确的数组成员上开始循环。

$contents = '{
        "SMSDATA": {
            "date": 20170817062448,
            "person": {
                "data":[{
                   "person": 321654978,
                   "information": "person information"
                },{
                   "person": 3216549,
                   "information": "person information"
                }]
            }
    }
}';

$decode = json_decode($contents, true);
print_r($decode);

foreach($decode['SMSDATA']['person']['data'] as $value){
    echo $value["person"]. " -> " . $value["information"]. "<br>";
}

结果

321654978 -> person information<br>
3216549 -> person information<br>

答案 1 :(得分:1)

首先,你的json是错误的。有一个缺失的括号。

这是正确的json:

{
  "SMSDATA": {
    "date": 20170817062448,
    "person": {
      "data": [{
        "person": 321654978,
        "information": "person information"
      }, {
        "person": 3216549,
        "information": "person information"
      }]
    }
  }
}

对于php文件,你需要循环遍历数组,但由于它是一个多维数组,它需要多个foreach。我还添加了pre来显示它正确返回的数组,这样你就可以更容易地看到数组的外观。这是php文件:

<?php

$str = 'test.json'; // The location of the files
    $contents = file_get_contents($str);  // get the information from the file

    $decode = json_decode($contents, true); // Creates the JSON as an array

    echo "<pre>".print_r($decode, true)."</pre>";


    foreach ($decode as $key => $value) {
        echo $value["date"]."<br>";
        foreach ($value["person"] as $k => $val) {
            foreach ($val as $index => $data) {
                echo $data["person"]."<br>";
                echo $data["information"]."<br>";
            }
        }

    }


?>