我有一个简单的json文件。这是结构。
1个玩家阵列,其中包含1个游戏和2个匹配数组。
我想将数据添加到匹配[0] ..首先匹配数组。
我正在使用必须存储在适当的匹配数组中的matchid属性。
所以如果我的matchid是4 ..我希望我的数据存储在匹配[0] [4]中。 我尝试了各种组合,却无法得到我想要的东西。
这是我的json文件,后面跟着我试过的代码。
{
"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
}
]
}
]
} 我试过的PHP代码。
$inp = file_get_contents('jsontrail.json');
$tempArray = json_decode($inp, true);
//adding to the matchid index of matches array
$matchid=3;
$arrne['winner'] ="winner";
$arrne['player1id'] ="player1id";
$arrne['player2id'] ="player2id";
array_push($tempArray->games[0]->matches[0]->[$matchid], $arrne );
$jsonData = json_encode($tempArray);
file_put_contents('jsontrail.json', $jsonData);
print_r( $inp);
解析错误:语法错误,意外'[',期待T_STRING或T_VARIABLE或'{'或'$'现在收到此错误..
代码2尝试
$inp = file_get_contents('jsontrail.json');
$tempArray = json_decode($inp, true);
//adding to the matchid index of matches array
$matchid=3;
$arrne['games']['matches'][0][$matchid]['winner'] ="winner";
$arrne['games']['matches'][0][$matchid]['player1id'] ="player1id";
$arrne['games']['matches'][0][$matchid]['player2id'] ="player2id";
array_push($tempArray,$arrne );
$jsonData = json_encode($tempArray);
file_put_contents('jsontrail.json', $jsonData);
print_r( $inp);
但是这会将阵列推到最后......
答案 0 :(得分:0)
对于初学者来说,你的JSON无效,还有一个额外的逗号。将你的json复制粘贴到http://jsonlint.com,它会告诉你什么是错的。
试试这段代码
<?php
$arrne = json_decode(file_get_contents('jsontrail.json'),true);
$inp = file_get_contents('jsontrail.json');
$tempArray = json_decode($inp, true);
//adding to the matchid index of matches array
$matchid = 1;
$newmatch=array();
$newmatch['winner'] ="LOOKFORME";
$newmatch['player1id'] ="player1id";
$newmatch['player2id'] ="player2id";
array_splice($tempArray["games"][0]["matches"], $matchid, 0, array($newmatch));
$jsonData = json_encode($tempArray);
file_put_contents('jsontrail.out.json', $jsonData);
答案 1 :(得分:0)
有一些问题:
1)最后一场比赛有一个逗号:
{
"player1id":0,
"player2id":4,
"winner":0
},
至少对我而言,打破了json_decode
。我使用this site来检查格式。
2)尝试访问Fatal error: Cannot use object of type std Class as array
时出现错误$tempArray['players']['games']['matches'][0]
- 您的JSON设置方式,您应该像这样访问它:$tempArray->games[0]->matches[$matchid]
。但是,我认为您可能需要先看一下JSON的结构。
3)您正在将`$tempArray['players']['games']['matches'][0][]
传递给array_push
。如果你只是意味着匹配中的第一个元素,那么请离开[]
。查看documentation here。
我建议您取出脚本的每个单独步骤并按顺序调试每个步骤。例如,首先加载JSON,然后将其转储到屏幕。然后解码并将其转储到屏幕。然后尝试访问其中的元素,并将它们转储到屏幕上,依此类推。
祝你好运!