4

我一直在使用一些 javascript 库,我注意到它们中的大多数都以这种形式输入:[{"foo": "bar", "12": "true"}]

根据json.org:

在此处输入图像描述

所以我们在一个数组中发送一个对象。

所以我有一个两部分的问题:

第 1 部分: 为什么不发送一个看起来更简单的对象或数组?

第2 部分: 用 Php 创建这样的 Json 的最佳方法是什么?

这是一种工作方法,但我发现它有点难看,因为它不适用于多维数组:

    <?php 
$object[0] = array("foo" => "bar", 12 => true); 

$encoded_object = json_encode($object); 
?> 

输出:

{"1": {"foo": "bar", "12": "true"}}

<?php $encoded = json_encode(array_values($object)); ?> 

输出:

[{"foo": "bar", "12": "true"}]

4

3 回答 3

9
  1. 因为这是传递多个对象的逻辑方式。它可能是为了促进这一点:

    [{"foo" : "bar", "12" : "true"}, {"foo" : "baz", "12" : "false"}]
    
  2. 在 PHP 中使用相同的逻辑结构:

    echo json_encode(array(array("foo" => "bar", "12" => "true")));
    
于 2012-08-27T08:53:14.607 回答
0

数组用作支持多个参数的便捷方式。在这种情况下,第一个参数是一个对象。

于 2012-08-27T08:49:44.500 回答
0

问题一:

JSON 只是将对象和/或数组表示为字符串的一种方式。如果您将数组或对象作为字符串,则将其发送到不同的地方会容易得多,例如发送到客户端的浏览器。不同的语言以不同的方式处理数组和对象。所以如果你在php中有一个数组,例如,你不能将它直接发送给客户端,因为它是只有php才能理解的格式。这就是 JSON 有用的原因。它是一种将数组或对象转换为许多不同语言都可以理解的字符串的方法。

问题二:

要输出一个像上面这样的对象数组,你可以这样做:

<?php
    //create a test array of objects
    $testarray = array();
    $testarray[] = json_decode('{"type":"apple", "number":4, "price":5}');
    $testarray[] = json_decode('{"type":"orange", "number":3, "price":8}');
    $testarray[] = json_decode('{"type":"banana", "number":8, "price":3}');
    $testarray[] = json_decode('{"type":"coconut", "number":2, "price":9}');

    $arraycount = count($testarray);


    echo("[");

    $i = 1;
    foreach($testarray as $object)
    {
        echo(json_encode($object));
        if($i !== $arraycount)
        {
            echo(",");
        }

        $i += 1;
    }

    echo("]");
?>

这将获取一组对象并遍历它们。在遍历它们之前,我们输出左方括号。

然后,对于数组中的每个对象,我们将其编码为 JSON 并在每个对象后面加上一个逗号。我们计算迭代次数,这样我们就不会在最后输出逗号。

于 2012-08-27T09:31:19.843 回答