【发布时间】:2010-11-28 22:27:55
【问题描述】:
我使用的插件需要以下 JSON 格式的数据:
[
{oV: 'myfirstvalue', oT: 'myfirsttext'},
{oV: 'mysecondvalue', oT: 'mysecondtext'}
]
如何使用 PHP 生成上述 JSON 输出?
【问题讨论】:
我使用的插件需要以下 JSON 格式的数据:
[
{oV: 'myfirstvalue', oT: 'myfirsttext'},
{oV: 'mysecondvalue', oT: 'mysecondtext'}
]
如何使用 PHP 生成上述 JSON 输出?
【问题讨论】:
一旦你有了你的 PHP 数据,你就可以使用json_encode 函数;自 PHP 5.2 起,它与 PHP 捆绑在一起。
在您的情况下,您的 JSON 字符串表示:
在 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 数据:字符串周围应该有双引号,包括对象属性的名称。
【讨论】:
最简单的方法可能是从您想要的对的关联数组开始:
$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 编码函数 - 只需注意传递给它们的数据以使其与预期格式匹配。
【讨论】:
json_encode 是在 5.2 中引入的)。
您可以使用 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)
}
【讨论】:
json_encode() 将生成完全相同的字符串。
这是php开发中最基本的规则之一:
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,因为嵌套的键没有被双引号包裹。
【讨论】:
这是生成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
【讨论】: