>我有以下json文件。
{
"posts": [{
"by": "johir",
"post": "Hello Ajax took",
"likes": 0
}, {
"by": "johir",
"post": "Now Work",
"likes": 0
}, {
"by": "johir",
"post": "Now Work",
"likes": 0
}, {
"by": "johir",
"post": "Here we go",
"likes": 0
}, {
"by": "johir",
"post": "Truely painful",
"likes": 0
}, {
"by": "johir",
"post": "Hello Ajax 4",
"likes": 0
}, {
"by": "johir",
"post": "Hello Ajax 2",
"likes": 0
}, {
"by": "johir",
"post": "Hello Ajax",
"likes": 0
}]
}
我想从这个 json 文件访问帖子。我编写了以下代码来访问特定帖子并将其更改为不同的值:
$inp = file_get_contents('posts.json');
$tempArray = json_decode($inp);
error_log($post);
$tempArray=$tempArray->posts;
$tempArray[2]['post']=" Done";
但它不起作用。还有其他选择吗?我已经尝试了很多来解决这个问题,但我对为什么这不起作用感到困惑?
当你处理一个json字符串时,理解如何遍历它的简单方法是执行json_decode(),然后转储结果,这样你就可以看到你正在处理的内容,如果你不能很好地阅读原始JSON数据。
所以这样做
$inp = '{
"posts": [{
"by": "johir",
"post": "Hello Ajax took",
"likes": 0
}, {
"by": "johir",
"post": "Now Work",
"likes": 0
}, {
"by": "johir",
"post": "Now Work",
"likes": 0
}, {
"by": "johir",
"post": "Here we go",
"likes": 0
}, {
"by": "johir",
"post": "Truely painful",
"likes": 0
}, {
"by": "johir",
"post": "Hello Ajax 4",
"likes": 0
}, {
"by": "johir",
"post": "Hello Ajax 2",
"likes": 0
}, {
"by": "johir",
"post": "Hello Ajax",
"likes": 0
}]
}';
$tempArray = json_decode($inp);
print_r($tempArray);
这将输出此
stdClass Object
(
[posts] => Array
(
[0] => stdClass Object
(
[by] => johir
[post] => Hello Ajax took
[likes] => 0
)
[1] => stdClass Object
(
[by] => johir
[post] => Now Work
[likes] => 0
)
[2] => stdClass Object
(
[by] => johir
[post] => Now Work
[likes] => 0
)
[3] => stdClass Object
(
[by] => johir
[post] => Here we go
[likes] => 0
)
[4] => stdClass Object
(
[by] => johir
[post] => Truely painful
[likes] => 0
)
[5] => stdClass Object
(
[by] => johir
[post] => Hello Ajax 4
[likes] => 0
)
[6] => stdClass Object
(
[by] => johir
[post] => Hello Ajax 2
[likes] => 0
)
[7] => stdClass Object
(
[by] => johir
[post] => Hello Ajax
[likes] => 0
)
)
)
所以现在你知道json_decode已经创建了一个对象,该对象具有一个名为 posts
的属性,这是一个数组。该数组是其他对象的数组。这些对象中的每一个都有 3 个属性,by
和post
和likes
。
所以现在我们看到$tempArray
不是一个非常有用的变量名,所以也许我们应该这样编码它:
$inp = file_get_contents('posts.json');
$tempObj = json_decode($inp);
因此,您现在可以处理它以获取所有post
值,如下所示:
foreach ( $tempObj->posts as $post ) {
echo $post->post;
}
或者像这样访问一个特定的值:
echo $tempObj->posts[2]->post;
或像这样设置其中一个值
$tempObj->posts[2]->post = ' Done';
<?php
$sInFile = 'in.json';
$sRaw = file_get_contents( $sInFile );
$aInData = json_decode( $sRaw );
$aPosts = $aInData->posts;
$iCountData = count( $aPosts );
for( $i = 0; $i < $iCountData; ++$i )
{
var_dump( $aPosts[ $i ][ 'by' ] );
var_dump( $aPosts[ $i ][ 'post' ] );
var_dump( $aPosts[ $i ][ 'likes' ] );
}
?>