如何使用php生成json?

时间:2009-09-16 19:45:37

标签: php json

之前我从未使用过JSON,而且我正在尝试使用以下javascript: http://jqueryselectcombo.googlecode.com/files/jquery.selectCombo1.2.6.js

它需要以下格式的JSON输出:

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

你能否引导我一个关于如何使用PHP生成JSON输出的例子?

6 个答案:

答案 0 :(得分:64)

获得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"}]


顺便说一句:Frolm我记得的,我说你的JSON字符串是无效的-JSON数据:字符串周围应该有双引号,包括对象属性的名称

请参阅http://www.json.org/语法。


希望这会有所帮助: - )

答案 1 :(得分:12)

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

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

答案 2 :(得分:6)

这应该有用:Generating JSON

答案 3 :(得分:2)

这是生成json格式的php代码

<?php

    $catId = $_GET['catId'];
    $catId = $_POST['catId'];   

    $conn = mysqli_connect("localhost","root","","DBName");
    if(!$conn)
    {
        trigger_error('Could not Connect' .mysqli_connect_error());
    }

    $sql = "SELECT * FROM TableName";
    $result = mysqli_query($conn, $sql);

    $array = array();

    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
    mysqli_close('$conn');
?>

答案 4 :(得分:1)

这是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,因为嵌套的键不是双引号包裹的。

答案 5 :(得分:0)

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

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

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

Voilà!

string(40) "{"first_property":1,"second_property":2}"
object(stdClass)#43 (2) {
  ["first_property"]=>
  int(1)
  ["second_property"]=>
  int(2)
}