使用PHP读写JSON

时间:2011-12-04 19:08:21

标签: php json

所以目前我正在开发一个需要使用PHP和JSON的项目。我当前设置代码的方式是使用file_get_contents读取JSON文件,然后使用内置的json_decode()函数。一切都在完美阅读,这是写作部分给我带来的麻烦。

我设置JSON树的方式是:

{
"test":[
        {
        "testName":"Winter 2011",
        "testDate":"12/04/2011",
        "testTime":"2:00pm",
        "testRoom":"room",
        "cap": 10,
        "spotsLeft": 0,
        "student":[
            {
                "fname":"Bob",
                "lname":"Roberts",
                "usrnm":"bobr",
                "email":"bob@gmail.com"
            }
        ]
    }
]
}

要获得正确的测试(因为会有多个测试)我正在使用foreach loop,然后我确保没有重复。此时我已准备好将新学生添加到JSON文件中,因此我打电话给: `

$file = file_get_contents('testDates.json');
$json = json_decode($file, true);

//Go through each test in the file
foreach ($json[test] as $t){
   .....
   //Works if I only do $t[student] but that only adds it to the $t[] and not the
   //JSON file. Can't seem to get it to add to the whole JSON string.
   array_push($json[$t][student], $newStudent);
   echo json_encode($json);
   .....
   //Use a file_put_contents later to write the file out

任何想法都会非常有帮助。它可能是指向阵列中某个点的指针错误,但第二组眼睛从未受伤。感谢。

3 个答案:

答案 0 :(得分:3)

$t是副本,它不引用原始对象。这适用于每个foreach循环。改为使用:

foreach ($json[test] as $k => $t){
    array_push($json[test][$k][student], $newStudent);
    ...
}

或者您可以尝试:

foreach ($json[test] as &$t){
    array_push($t[student], $newStudent);
    ...
}

请点击此处了解foreach的工作原理:http://php.net/manual/en/control-structures.foreach.php

答案 1 :(得分:0)

你在foreach中使用了错误的$ json [$ t]而不是$ json [“test”] [$ t],你还需要使用键值对

$testVal = $json["test"];
foreach ($testVal as $key => $val){
    . . .
    array_push($testVal[$key]["student"], $newStudent);
    . . .
}

P.S。使用$ json ['test']而不是$ json [test],第一个导致语法警告,PHP将其解释为字符串“test”(在您的情况下,它正在工作:))

答案 2 :(得分:0)

试试这个:

$json = json_decode($jsonString);

if($json["color"] == "blue"){
 ...
}

$json["language"] = "php";

$newJsonString = json_encode($json);

不是那么容易吗?