猿问

如何在 json 中正确格式化 WP_REST_Response 并获取数组而不是对象?

我正在用 wordpress 构建一个非常小的应用程序,需要通过 ajax 获取 json 数据。我正面临一个奇怪的(至少对我而言)问题。我的原始数据日志是这样的(请注意items和children>它们是数组):


object(stdClass)#6740 (2) {

  ["type"]=>

  string(5) "areas"

  ["items"]=>

  array(1) {

    [92]=>

    object(stdClass)#6742 (10) {

      ["term_id"]=>

      int(92)

      ["name"]=>

      string(6) "Italia"

      ["slug"]=>

      string(6) "italia"

      ["term_taxonomy_id"]=>

      int(92)

      ["taxonomy"]=>

      string(12) "dealer_areas"

      ["description"]=>

      string(0) ""

      ["parent"]=>

      int(82)

      ["count"]=>

      int(1)

      ["term_order"]=>

      float(0.1)

      ["children"]=>

      array(1) {

        [126]=>

        object(stdClass)#6741 (10) {

          ["term_id"]=>

          int(126)

          ["name"]=>

          string(8) "Sardegna"

          ["slug"]=>

          string(8) "sardegna"

          ["term_taxonomy_id"]=>

          int(126)

          ["taxonomy"]=>

          string(12) "dealer_areas"

          ["description"]=>

          string(0) ""

          ["parent"]=>

          int(92)

          ["count"]=>

          int(1)

          ["term_order"]=>

          float(0.10003)

          ["children"]=>

          array(0) {

          }

        }

      }

    }

  }

}

如果我将它直接传递给 WP_REST_Response,然后作为 json 响应 ( return new WP_REST_Response($response_obj))传递给 js ,我会得到这样的日志:


正如你所看到的,它不完全是 json ......有 getter/setter 方法..

好的,然后我传递值 json 编码 ( return new WP_REST_Response(json_encode($response_obj))) 并通过 javascript 解析JSON.parse()。我明白了:

http://img.mukewang.com/60c32d740001bb0102790245.jpg

或者这个(另一个例子超过 1 个 obj)

http://img2.mukewang.com/60c32d820001ae0b04780075.jpg

如您所见,我得到了 json,但即使原始项目数据是一个数组,现在我也得到了一个对象。如何保留原始数组类型?


蛊毒传说
浏览 159回答 1
1回答

德玛西亚99

我自己的回答是:这不是 WP_REST_Response 问题。这不是 json_decode 问题问题是数据格式和javascript读取数组的方式简而言之:不可能将 php 非连续索引数组转换为 javascript 数组,因为 javascript 需要连续的整数键。在所有其他情况下,javascript 读取为关联数组或对象(本质上是相同的)。因此,php非连续索引数组的json转换总会输出对象。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答