2013-04-24 5 views
5

Я использую только 1 данные для вставки в свой json-файл.Как добавить элемент в форматированный файл json-файла

$data=$_POST['myusernamer']; 

$inp = file_get_contents('7players.json'); 
$tempArray = json_decode($inp); 
array_push($tempArray, $data); 
$jsonData = json_encode($tempArray); 
file_put_contents('7players.json', $jsonData); 

Так выглядит мой json-файл. Я просто хочу добавить 1 игрока в конце.

{ 

"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" 
    }, 
    ], 


"games" : [ 

    { 

    "matches" : [ 

      { 

      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":7, 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      } 
     ] 
     }, 

    { 

    "matches" : [ 

      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":7, 
      "winner":"*" 
      }, 
      {   
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 
      { 
      "player1id":"*", 
      "player2id":"*", 
      "winner":"*" 
      }, 

     ] 
    } 
    ] 
} 

Вопрос, как добавить игрока в конце? И я также хотел бы знать, как обновить

player1id":"*", 
"player2id":"*", 
"winner":" 

в массиве совпадений.

ответ

7

Просто расшифровать вашу строку JSON и затем использовать массив толчок

$tempArray = json_decode($jsonstring, true); 
array_push($tempArray, $your_data); 

В вашем случае

$str = '{ 

"players":[ 
    { 

     "name":"Moldova", 
     "image":"/Images/Moldova.jpg", 
     "roll_over_image":"tank.jpg" 
    }, 
    { 

     "name":"Georgia", 
     "image":"/Images/georgia.gif", 
     "roll_over_image":"tank.jpg" 
    } ]}'; 


$arr = json_decode($str, true); 
$arrne['name'] = "dsds"; 
array_push($arr['players'], $arrne); 
print_r($arr); 

Просто проверьте значение print_r ($ обр); Надеюсь, это то, что вы хотите. :)

+2

не это собирается потерпеть неудачу? Я всегда думал, что json_decode - это представление объекта, а не массив. Вы могли бы использовать true в качестве аргумента второго аргумента, чтобы получить ассоциативное представление массива? спасибо за объяснение :) – intelis

+1

@intelis хорошо сказал, что второй параметр настолько впечатляющий. :) –

+0

@chandresh_cool Спасибо большое. Я сомневаюсь. Могу передать только 1 значение в araay, скажем только имя игрока, и оставить остальное. Будет ли это делать какие-либо проблемы? – user2234992

5

Добавление другого игрока

$tempArray = json_decode($inp, true); 
array_push($tempArray['players'], array('name' => $data['username'], 'image' => $data['userimage'], 'roll_over_image' => 'tank.jpg')); 

Обновление соответствует

первый матч массив

$tempArray['games'][0]['matches']; 

второй матч массив

$tempArray['games'][1]['matches']; 

теперь простые двумерные массивы ш с ключами player1id, player2id и winner - их должно быть легко обновить. После этого вы можете закодировать $tempArray обратно на json.

+0

Спасибо, что ответили !! Что делать, если некоторые значения не имеют значений в нем. Я вообще не прохожу. Или я передаю с нулевыми значениями. Что происходит потом .. – user2234992

2
<html> 
<head> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js" ></script> 
</head> 
<body> 
    <?php 
     //first copy your json data data.json 
     $str = file_get_contents('data.json');//get contents of your json file and store it in a string,bro small suggestion never keep any JSON data in ur html file its not safe.always keep json data in external file. 
     $arr = json_decode($str, true);//decode it 
     $arrne['players'] = "sadaadad"; 
     $arrne['image'] = "sadaadad"; 
     $arrne['roll_over_image'] = "sadaadad"; 
     array_push($arr['employees'], $arrne);//push contents to ur decoded array i.e $arr 
     $str = json_encode($arr); 
     //now send evrything to ur data.json file using folowing code 
     if (json_decode($str) != null) 
      { 
      $file = fopen('data.json','w'); 
      fwrite($file, $str); 
      fclose($file); 
      } 
      else 
      { 
      // invalid JSON, handle the error 
      } 

     ?> 
</body>