【问题标题】:How to parse json string starting from the top?如何从顶部开始解析json字符串?
【发布时间】:2014-03-21 14:33:40
【问题描述】:

我有一个json API,它有许多可选字段。当我收到这个对象时,我需要解析它并将数据添加到数据库中。 JSON.parser() 似乎首先解析最内部的数据,这是一种浪费。我需要先从最顶层开始解析。

我需要制作一个自定义字符串解析器还是有一个可用的?

示例 API:

"AddRequest" : {
    "OptionalId" : "",
    "OptionalType" : {
        "Status" : "taken",
        "DateStart" : "21/05/2013",
        "DateEnd" : "21/06/2013",
        "Summary" : "It was really good"
    },
    "OptionalHotels" : [
        {
            "HotelId" : "1",
            "CheckIn" : "21/05/2013", 
            "CheckOut" : "21/06/2013", 
            "Name" : "Hotel Name", 
            "Latitude" : "", 
            "Longitude" : "",
            "City" : "Toronto"
        },
        ... 
    ],
    ...
}

代码:

var jsonObject = JSON.parse(data , 
    function(k, v) {
        console.log(k + ':' + v);
    }
);

【问题讨论】:

  • “先解析最里面的数据”是什么意思?整个 JSON 文本必须先由解析器解析,然后才能访问它。
  • 为什么有些键在引号中而有些不是?你是什​​么意思我的“最内在的数据”?您不能(轻松)只解析 JSON 字符串的一部分。当您尝试对整个字符串调用 JSON.parse() 时会发生什么?
  • @Quentin 解析首先返回Status : taken键值对而不是AddRequest : {...}
  • @andre — 解析它将返回一个 JavaScript 对象,而不是单个键/值对。 (而且 JSON 和 JavaScript 对象都是无序的)
  • @Quentin 解析器应在一次调用中返回从整个 JSON 字符串解析的 javascript 对象。你能展示你用来解析 JSON 的代码吗?

标签: javascript json node.js parsing


【解决方案1】:

JSON.parse 的第二个参数是一个转换数据的函数。

如果你只是想访问它,那就正常解析它,然后从返回值中访问你关心的属性。

var javaScriptObject = JSON.parse(data);
console.log(javaScriptObject.whateverYouWantFirst);

【讨论】:

  • 如何检查可选字段?不用扔。
  • if (obj.PotentiallyPresentOptionalField) {} ??
  • @ChristopherW 谢谢,未定义似乎评估为假。直到现在我才知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多