31

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

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

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

4

5 回答 5

69

一旦你有了你的 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/

于 2009-09-16T19:49:05.543 回答
17

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

$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 编码函数 - 只需注意传递给它们的数据以使其与预期格式匹配。

于 2009-09-16T19:50:34.180 回答
2

这是 php 开发中最基本的规则之一:

不要手动构建 JSON 字符串。使用json_decode()

如果您需要循环填充数据,请先收集所有数据,然后调用json_encode() 一次

不要尝试将其他数据包装/前置/附加到编码的 json 字符串。如果要将数据添加到 json 有效负载,则对其进行解码,添加数据,然后重新编码。

如果您将对象类型或数组类型数据传递给json_encode()- 默认情况下,它仍然会使用方括号为索引数组创建一个字符串,并为具有非索引键的可迭代数据创建一个花括号。

代码:

$array = [
    [
        'oV' => 'myfirstvalue',
        'oT' => 'myfirsttext'
    ],
    [
        'oV' => 'mysecondvalue',
        'oT' => 'mysecondtext'
    ]
];

echo json_encode($array);

输出:

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

为清楚起见,我应该表示 OP 所需的输出不是有效的 json,因为嵌套键不是双引号包裹的。

于 2021-08-03T10:26:12.850 回答
1

这是生成json格式的php代码。

while ($row=mysqli_fetch_assoc($result))
{
    $array[] = $row;
}
echo '{"ProductsData":'.json_encode($array).'}'; //Here ProductsData is just a simple String u can write anything instead
于 2015-10-26T21:20:40.510 回答
1

您可以使用 stdClass,添加属性和 json_encode 对象。

$object = new stdClass();
$object->first_property = 1;
$object->second_property = 2;

echo '<pre>';var_dump( json_encode($object) , $object );die;

瞧!

string(40) "{"first_property":1,"second_property":2}"
object(stdClass)#43 (2) {
  ["first_property"]=>
  int(1)
  ["second_property"]=>
  int(2)
}
于 2018-09-27T12:29:24.083 回答