0

我在堆栈中搜索了很多,谷歌试图找到似乎很容易的答案,但我仍然坚持

我编写了一个代码来用我想要的值对 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 中的数组添加数字,我不知道为什么它们编号

在此处输入图像描述

这个数字会影响我在 iOS 应用程序中将 json 读取为 JSONModel 的方式,因此希望您能帮助我提前感谢

4

3 回答 3

0

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

<?php

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

?>
于 2014-01-30T21:55:16.180 回答
0

您出现数字的原因是因为您正在向数组添加一个键(它在 JS 中或多或少地用作列表)。因此,在您基本上将对象“文件”作为对象列表之前,与任何其他 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 编码并像往常一样返回它。您也可以将上述内容放在一个循环中。我缺乏足够的背景来推荐确切的方法。

于 2014-01-30T22:05:23.913 回答
0

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

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

  • 用于json_decode从您的 json 字符串生成数组;
  • 找到要添加数据的正确部分/子数组;
  • 用于array_unshift添加新的键值对;
  • 用于json_encode从您的完整数组生成一个 json 字符串。
于 2014-01-30T22:11:50.160 回答