简单的数组插入json文件

问题描述:

我有一个简单的json文件。这是结构。简单的数组插入json文件

有1个游戏和2个匹配数组的1个玩家阵列。

我想添加数据匹配[0] ..第一匹配数组。

我使用的匹配属性必须存储在适当的匹配数组中。

所以,如果我的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); 

但是这会将阵列推到最后..

+1

你确定你没有错过'arrne = json_decode'前面的'$'吗? – 2013-04-25 05:54:42

+0

哦,我离开时发布我的代码..现在编辑.. – user2234992 2013-04-25 05:56:16

+0

@AndriusNaruševičius你有任何想法..需要帮助.. – user2234992 2013-04-25 06:06:51

对于初学者,您的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); 
+0

哦,好吧..将尽力..谢谢replyin .. – user2234992 2013-04-25 06:46:10

+0

我做到了..如果你告诉我如何将数据添加到阵列我wnat .. – user2234992 2013-04-25 06:48:08

+0

我想添加数据在playes-> games-> matches-> 0-> myinputmatchid ..任何想法如何我可以实现这一目标? ?再次感谢您的回复 – user2234992 2013-04-25 06:50:45

有几件事情错了:

1)是在最后一场比赛逗号:

{ 
    "player1id":0, 
    "player2id":4, 
    "winner":0 
}, 

其中,至少对我来说,打破了json_decode。我使用this site来检查格式。

2)当您尝试访问$tempArray['players']['games']['matches'][0]时出现错误Fatal error: Cannot use object of type std Class as array - 您的JSON设置方式,您应该像这样访问它:$tempArray->games[0]->matches[$matchid]。不过,我认为你可能需要先看看你的JSON的结构。

3)您正在将`$tempArray['players']['games']['matches'][0][]传递到array_push。如果你只是意味着比赛中的第一个元素,那就离开[]。检查出documentation here

我建议你拿出脚本的每个单独步骤并按顺序调试每一个脚本。例如,首先加载JSON,然后将其转储到屏幕上。然后解码并将其转储到屏幕上。然后尝试访问其中的元素,并将其转储到屏幕上,依此类推等等。

祝你好运!

+0

如果你能告诉我如何根据我的inputmatch id来添加它。 – user2234992 2013-04-25 07:04:26

+0

我建议用新代码编辑你的原始问题,这样我们就可以正确地看到代码的变化。 – LeonardChallis 2013-04-25 07:47:27

+0

更新了两个代码..请看一看 – user2234992 2013-04-25 08:51:03