我几乎可以将数据添加到我的文件中。但我正试图找出确切的语法..任何帮助非常感谢..
我的php脚本$inp = file_get_contents('jsontrail.json');
$tempArray = json_decode($inp, true);
//adding to the matchid index of matches array
$matchid=3;
$arrne['games']['matches'][$matchid]['winner'] ="winner";
$arrne['games']['matches'][$matchid]['player1id'] ="player1id";
$arrne['games']['matches'][$matchid]['player2id'] ="player2id";
array_push($tempArray,$arrne );
$jsonData = json_encode($tempArray);
file_put_contents('jsontrail.json', $jsonData);
print_r( $inp);
my valid json file
{
"players": [
{
"name": "Moldova",
"image": "/Images/Moldova.jpg",
"roll_over_image": "tank.jpg"
},
/* repeat */
],
"games": [
{
"matches": [
{
"player1id": 0,
"player2id": 1,
"winner": "*"
},
/* repeat */
]
},
{
"matches": [
{
"player1id": 0,
"player2id": 1,
"winner": "*"
},
/* repeat */
]
}
]
}
我正在尝试添加数据到已经存在的数组,
游戏-> first_match_array -> mymatch_id_input -> push_data_here。
执行后,这是我在屏幕
中得到的内容{
"players":
[
{
"name":"Moldova",
"image":"/Images/Moldova.jpg",
"roll_over_image":"tank.jpg"
},
/* repeat */
]
,
"games":
[
{
"matches":
[
{
"player1id":0,
"player2id":1,
"winner":"*"
},
/* repeat */
]
},
{
"matches":
[
{
"player1id":0,
"player2id":1,
"winner":"*"
},
/* repeat */
]
}
],
"0":
{
"games":
{
"matches":
[
{
"3":
{
"winner":"winner",
"player1id":"player1id",
"player2id":"player2id"
}
}
]
}
}
}
上面的是通过array_push得到的。下一个代码是array_merge
{
"players":
[
{
"name":"Moldova",
"image":"/Images/Moldova.jpg",
"roll_over_image":"tank.jpg"
},
/* repeat */
],
"games":
[
{
"matches":
[
{
"player1id":0,
"player2id":1,
"winner":"*"
},
/* repeat */
]
},
{
"matches":
[
{
"player1id":0,
"player2id":1,
"winner":"*"
},
/* repeat */
]
}
],
"0":
{
"games":
{
"matches":
[
{
"3":
{
"winner":"winner",
"player1id":"player1id",
"player2id":"player2id"
}
}
]
}
},
"1":
{
"games":
{
"matches":
[
{
"3":
{
"winner":"winner",
"player1id":"player1id",
"player2id":"player2id"
}
}
]
}
}
}
请帮助,似乎很简单,但找不到确切的代码来做…请帮助…
问题是你的json字符串格式不正确,它没有正确构造,试试这个
$str = '{
"players": [
{
"name": "Moldova",
"image": "/Images/Moldova.jpg",
"roll_over_image": "tank.jpg"
},
{
"name": "Georgia",
"image": "/Images/georgia.gif",
"roll_over_image": "tank.jpg"
},
{
"name": "Belarus",
"image": "/Images/Belarus.gif",
"roll_over_image": "tank.jpg"
},
{
"name": "Armenia",
"image": "/Images/armenia.png",
"roll_over_image": "tank.jpg"
},
{
"name": "Kazahstan",
"image": "/Images/kazahstan.gif",
"roll_over_image": "tank.jpg"
},
{
"name": "Russia",
"image": "/Images/russia.gif",
"roll_over_image": "tank.jpg"
},
{
"name": "Ukraine",
"image": "/Images/ukraine.png",
"roll_over_image": "tank.jpg"
},
{
"name": "Uzbekistan",
"image": "/Images/uzbekistan.gif",
"roll_over_image": "tank.jpg"
}
],
"games": [
{
"matches": [
{
"player1id": 0,
"player2id": 1,
"winner": "*"
},
{
"player1id": 2,
"player2id": 3,
"winner": "*"
},
{
"player1id": 4,
"player2id": 5,
"winner": "*"
},
{
"player1id": 6,
"player2id": 7,
"winner": "*"
},
{
"player1id": 0,
"player2id": 2,
"winner": "*"
},
{
"player1id": 4,
"player2id": 6,
"winner": "*"
},
{
"player1id": 0,
"player2id": 4,
"winner": 4
}
]
},
{
"matches": [
{
"player1id": 0,
"player2id": 1,
"winner": "*"
},
{
"player1id": 2,
"player2id": 3,
"winner": "*"
},
{
"player1id": 4,
"player2id": 5,
"winner": "*"
},
{
"player1id": 6,
"player2id": 7,
"winner": "*"
},
{
"player1id": 0,
"player2id": 2,
"winner": "*"
},
{
"player1id": 4,
"player2id": 6,
"winner": "*"
},
{
"player1id": 0,
"player2id": 4,
"winner": 0
}
]
}]}';
你把键顺序弄乱了,
$arrne['games']['matches'][$matchid]['winner']
应该$arrne['games'][$matchid]['matches']['winner']
你缺少一个数字索引,
$arrne['games']['matches'][$matchid]['winner']
应该是
$arrne['games'][]['matches'][$matchid]['winner']
或
$arrne['games'][$matchid]['matches'][]['winner']
因为原始JSON中有
"games": [
{
"matches": [
/* ... */
]
},
{
"matches": [
/* ... */
]
}
结构是games->[index]->matches->[index]
,而不是games->matches->[index]
。
同样,简单的array_merge
也不行,你需要array_merge_recursive
;
示例代码:
$json=<<<JSON
...
JSON;
$tempArray=json_decode($json,true);
print_r($tempArray);
$matches=array(
"games"=>array(
3=>array(
"matches"=>array(
array(
"winner"=>"winner",
"player1id"=>"player1id",
"player2id"=>"player2id"
)
)
)
)
);
print_r(array_merge_recursive($tempArray,$matches));
> <罢工现场演示>罢工现场演示>p> 编辑
$tempArray["games"]
和$tempArray["games"][index]["matches"]
都是数值数组,因此array_merge
将追加,而不是覆盖。如果需要修改现有值,而不是添加新值,直接像
$tempArray["games"][index]["matches"][$matchid]["winner"]="winner";