从多维数组数据生成 json 字符串

我正在使用一个插件,它需要一个关联行数组作为json格式的字符串 - 类似于:

[
    {oV: 'myfirstvalue', oT: 'myfirsttext'},
    {oV: 'mysecondvalue', oT: 'mysecondtext'}
]

如何使用 PHP 将多维数组转换为有效的 JSON 输出?


答案 1

一旦你有了你的PHP数据,你可以使用json_encode函数;从 PHP 5.2 开始,它与 PHP 捆绑在一起。

在您的例子中,您的 JSON 字符串表示:

  • 包含 2 个元素的列表
  • 每个都是一个对象,包含 2 个属性/值

在 PHP 中,这将创建你所表示的结构:

$data = array(
    (object)array(
        'oV' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    (object)array(
        'oV' => 'mysecondvalue',
        'oT' => 'mysecondtext',
    ),
);
var_dump($data);

您将获得:var_dump

array
  0 => 
    object(stdClass)[1]
      public 'oV' => string 'myfirstvalue' (length=12)
      public 'oT' => string 'myfirsttext' (length=11)
  1 => 
    object(stdClass)[2]
      public 'oV' => string 'mysecondvalue' (length=13)
      public 'oT' => string 'mysecondtext' (length=12)

并且,将其编码为 JSON:

$json = json_encode($data);
echo $json;

您将获得:

[{"oV":"myfirstvalue","oT":"myfirsttext"},{"oV":"mysecondvalue","oT":"mysecondtext"}]

顺便说一句,根据我的记忆,我会说你的JSON字符串不是有效的JSON数据:字符串周围应该有双引号,包括对象属性的名称。

有关语法,请参阅 http://www.json.org/


答案 2

最简单的方法可能是从您想要的对的关联数组开始:

$data = array("myfirstvalue" => "myfirsttext", "mysecondvalue" => "mysecondtext");

然后使用 foreach 和一些字符串连接:

$jsontext = "[";
foreach($data as $key => $value) {
    $jsontext .= "{oV: '".addslashes($key)."', oT: '".addslashes($value)."'},";
}
$jsontext = substr_replace($jsontext, '', -1); // to get rid of extra comma
$jsontext .= "]";

或者,如果您有最新版本的PHP,则可以使用内置的json编码函数 - 只需小心您传递它们的数据以使其与预期的格式相匹配即可。


推荐