【问题标题】:Do I have to parse a JSON string and then traverse the resulting object or can I just traverse the string?我是否必须解析 JSON 字符串然后遍历生成的对象,或者我可以只遍历字符串吗?
【发布时间】:2017-03-01 18:31:02
【问题描述】:

我正在学习 Google Maps API;对其地理位置 API 的调用会返回一个巨大的 JSON 字符串(示例:https://maps.googleapis.com/maps/api/geocode/json?address=66+Fort+Washington+Avenue+New+Yor,NY&key=AIzaSyAGLzbjA0rEl5whQgiuZZdIGVzPZzLv9Kg)。如果我要从生成的数据集中寻找特定的键/值对以在我的 Java 脚本应用程序中使用,最好将该 JSON 字符串转换为对象(解析),然后遍历该对象以获取该键/值对,还是只遍历返回的 JSON 字符串本身就可以了?各有什么优缺点?

【问题讨论】:

    标签: javascript google-maps-api-3 geolocation


    【解决方案1】:

    解析 JSON 将始终使代码更易于阅读,并且对您接收的数据的更改不那么敏感。但是,如果您正在查看纯粹的性能,这取决于您在返回的 JSON 字符串中搜索的数据的唯一性,以及您正在执行的搜索次数。如果您(例如)只想要上面提到的返回字符串中的纬度/经度位置,那么您可以这样做:

    var index = string.search("location");
    var index2 = string.substring(index).search(/-?\d/); // finds first number
    lat = parseFloat(string.substring(index+index2));
    var index3 = string.substring(index+index2).search("lng");
    var index4 = string.substring(index+index2+index3).search(/-?\d/); // finds first number
    lon = parseFloat(string.substring(index+index2+index3+index4));
    

    或者,通过解析它,你可以这样做:

    var obj = JSON.parse(string);
    lat = obj.results[0].geometry.bounds.northeast.lat;
    lon = obj.results[0].geometry.bounds.northeast.lon;
    

    显然,解析后的版本更易于阅读。但是,我每次运行 200000 次,发现基于字符串搜索的方法比 JSON 对象解析方法快 4 倍多一点。可能还有其他方法可以优化基于搜索的方法,但您明白了。

    【讨论】:

      【解决方案2】:

      在尝试访问其属性之前,您应该使用 JSON.parse 将您的字符串转换为 JavaScript 对象。你不能“遍历返回的 JSON 字符串本身”

      var json = '{ "property": "value" }'
      // JSON strings cannot be traversed
      console.log(typeof json) //=> "string"
      console.log(json.property) //=> undefined
      
      
      var object = JSON.parse(json)
      // Objects can be traversed
      console.log(typeof object) //=> "object"
      console.log(object.property) //=> "value"

      【讨论】:

        【解决方案3】:

        如果 api 在字符串中返回 json,您可以解析它并遍历元素,直到找到您需要的内容。否则你将如何遍历字符串?在我看来,这是你不应该做的事情。

        【讨论】:

        • 根据指南,如果您在 Javascript 中创建一个“JSON”字符串,在您对其进行字符串化之前,它并不是真正的“JSON 字符串”;直到它只是一个通过 JSON 语法编写的 Javascript 对象。我假设这个 API 返回的 JSON 对象实际上是字符串化的,因此需要实际解析?
        • 这里的问题是您得到的响应是 JSON,没有字符串。如果响应(但不是这种情况)是嵌入在字符串中的 JSON,则需要对其进行解析。
        猜你喜欢
        • 1970-01-01
        • 2022-11-11
        • 1970-01-01
        • 2017-01-30
        • 2018-05-15
        • 1970-01-01
        相关资源
        最近更新 更多