【问题标题】:why do javascript libraries using json choose a [ { } , { } ] structure为什么使用 json 的 javascript 库选择 [ { } , { } ] 结构
【发布时间】:2023-03-20 16:42:01
【问题描述】:

我一直在使用一些 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"}]

【问题讨论】:

  • 你发送一个对象数组,如果只有一个对象需要发送,那么你可以只发送一个对象。
  • array(array("foo" =&gt; "bar", 12 =&gt; true))

标签: php json javascript


【解决方案1】:
  1. 因为这是传递多个对象的合乎逻辑的方式。它可能是为了促进这一点:

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

    echo json_encode(array(array("foo" => "bar", "12" => "true")));
    

【讨论】:

  • 作为附录,额外的好处是,在处理以这种格式交付的 JSON 时,将运行 for 循环,如 for(....){ tweet = tweets[i]; tweet_card = build_tweet(tweet); frag.appendChild(tweet_card); },突然之间,您的视图逻辑是非常紧凑,这一切都很有意义,因为您正在处理集合中传递的各个单元。如果使用明确命名的对象键(即:tweet1, tweet2 或时间戳或其他任何内容,则隔离单个单元会困难得多)。一切都是关于最后的游戏。
【解决方案2】:

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

【讨论】:

  • 没有回答完整的问题。
  • 有两个不相关的问题。
【解决方案3】:

问题一:

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 并在每个对象后面加上一个逗号。我们计算迭代次数,这样我们就不会在末尾输出逗号。

【讨论】:

  • json_encode 确实适用于多维数组,但我不知道如何用它生成 [{ }] 结构。
猜你喜欢
  • 2014-08-05
  • 2012-04-01
  • 2023-01-15
  • 2011-04-15
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多