为标题的JSON添加值

时间:2014-01-30 21:46:26

标签: php json jsonmodel

我在堆栈中搜索了很多,并且google尝试找到答案,这似乎很容易,但我仍然坚持使用

我编写了一个代码,用我想要的值来编码json。我想为JSON添加一个键/值

JSON如下结构

    {
   - files: [
      {
        title: "works",
       - tracks: [
           {
             title: "File",
             format: "mp3"
           }
        ]
      },
   -{
       title: "season1",
       tracks: [
         {
             title: "Button-1",
             format: "wav"
         },
   -{
        title: "Beep-9",
        format: "wav"
     }
    ]
   }
  ]
}

我想在标题文件下添加一个键及其在json开头的值作为属性,我的意思是可以通过代码读取

  

JSON [文件] [new_key]

我试图像这样设置这个值

  

$ json ['new_key'] =“new_value”;

但是这会导致在json中向数组添加数字,我不知道它们为什么编号

enter image description here

这个数字会影响我在iOS应用中作为JSONModel的json阅读方式 所以,我希望你能帮助我 提前谢谢

3 个答案:

答案 0 :(得分:0)

假设您要添加的新值因文件而异,您需要循环遍历$json[files]并按键/值对插入它们。

<?php

for($i=0; $i<count($json); $i++)
    $json[files][$i]["new_key"] = "value";

?>

答案 1 :(得分:0)

你出现数字的原因是因为你正在向一个数组添加一个键(它或多或少地作为JS中的列表运行)。所以在你基本上把对象“files”作为一个零索引的对象列表之前,就像任何其他JS数组一样。添加密钥时,JS只需将密钥添加到当前密钥的末尾(在您的情况下为0和1)。

好像你有一个多媒体对象列表,每个对象都有一个标题和一个轨道列表。解决问题最直接的方法如下:

$fileItem['title'] = 'works';
$fileItem['tracks'] = array(
    array(
        'title' => 'File',
        'format' => 'mp3'
    )
);
$json['files'][] = $fileItem;

$fileItem['title'] = 'season1';
$fileItem['tracks'] = array(
    array(
        'title' => 'Button-1',
        'format' => 'wav'
    ),
    array(
        'title' => 'Beep-9',
        'format' => 'wav'
    )
);
$json['files'][] = $fileItem;

然后你JSON编码并像往常一样返回它。您也可以将上述内容放在循环中。我缺乏足够的背景来推荐具体方法。

答案 2 :(得分:0)

我仍然不确定你到底有什么,但似乎你正试图操纵json字符串。

如果操作正确,这可能是最有效的解决方案,但您还可以做的是:

  • 使用json_decode从您的json字符串生成数组;
  • 找到要添加数据的正确部分/子数组;
  • 使用array_unshift添加新的键 - 值对;
  • 使用json_encode从完整数组中生成json字符串。