0

我有一个简单的 json 文件。这是结构。

1 个玩家数组,其中包含 1 个游戏和 2 个匹配数组。

我想将数据添加到 matches[0]..first 匹配数组。

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

因此,如果我的 matchid 是 4..我希望我的数据存储在 match[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);

但这将数组推到最后..

4

2 回答 2

0

有几点不对:

1)最后一场比赛有一个逗号:

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

至少对我来说,这打破了json_decode. 我使用这个网站来检查格式。

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. 如果您只是指匹配中的第一个元素,那么请不要使用[]. 在此处查看文档

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

祝你好运!

于 2013-04-25T06:55:52.787 回答
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);
于 2013-04-25T06:44:52.120 回答