【问题标题】:Javascript - reading arrays from JSONJavascript - 从 JSON 读取数组
【发布时间】:2013-05-23 23:27:17
【问题描述】:

我正在使用以 JSON 格式返回数据的 API。响应示例如下

{
    "code": 200,
    "count": 4,
    "currentPage": 1,
    "date": "2013-05-24T09:19:37.964+1000",
    "executedQuery": "cafe",
    "message": "OK",
    "originalQuery": "cafe",
    "results": [{
            "aboutId": "b3ec5ac4096078f89fa4a9f3adcec930a1d4997c7cae30b026d61f8fcbf2013b",
            "categories": [{
                    "id": "35491",
                    "name": "Cafes",
                    "sensitive": false
                }],
            "detailsLink": "http://www.yellowpages.com.au/nsw/mt-colah/bobbin-inn-13830124-listing.html?referredBy=TAPI-jHOsyHrSfHBBlo0IExDjXZZJx6PszwX6",
            "hasExposureProducts": false,
            "id": "13830124",
            "listingType": "Business",
            "name": "Bobbin Inn",
            "primaryAddress": {
                "addressLine": "1 Chase Rd",
                "geoCodeGranularity": "PROPERTY",
                "latitude": "-33.678276",
                "longitude": "151.112964",
                "mappable": true,
                "postcode": "2079",
                "state": "NSW",
                "suburb": "Mt Colah",
                "type": "PHYSICAL"
            },
            "primaryContacts": [{
                    "type": "PHONE",
                    "value": "(02) 9457 7170"
                }],
            "pureMobileBusiness": false,
…

据我所知,此响应中有许多数组。但是,我无法在创建方法上解析这些数据

这是我的代码(这适用于我定义的这个字段,但...见下文)

 for (var i in p) {
     str += blocka + uibare + p.executedQuery + " (" + p.executedQuery+ ")</div></div>";
     str += blockb + uibarc + p.executedQuery + "</div></div>";
     str += blockc + uibare + p.executedQuery + "</div></div>";
     str += blockd + uibarc + p.executedQuery + "</div></div>";
     str += blocke + uibare + p.executedQuery + "</div></div>";
      }

这是有效的,因为 executeQuery 不是数组的一部分。但是,如果我想获得例如似乎是结果数组一部分的“名称”?还是我看错了?

所以我尝试了

str += blockb + uibarc + p.results[i].name + "</div></div>";

它不会提取任何数据。

【问题讨论】:

  • 这个 json 完全不正确,甚至没有右括号
  • 你试过console.log(jons)你的json吗?输出是什么?它是字符串还是对象? JSON 验证器 => jsonlint.com
  • 那么p 是什么?是代表您的字符串的JSON.parsed 对象吗?为什么不使用i 属性?
  • 错误:第 1 行解析错误:...bileBusiness":false,------------------------^ 期待 ' STRING',得到'EOF'
  • 你试过p["results"][i]["name"]。您是否也尝试过使用i&lt;p.results.length 进行简单的迭代 for 循环(而不是 for-each)?

标签: javascript ajax json html api


【解决方案1】:

results 是一个包含单个键和值对象的数组。

试试result[0]["name"]

更适合您的要求:

str += blockb + uibarc + p.results[0]["name"] + "</div></div>";

【讨论】:

  • API 人员很肯定他们将其吐回 JSON 中,这就是它吐出的内容(尽管它是摘录)
  • 是的,我已经验证过了。它说有效的 JSON 响应(当我使用 URL 时,我想将它粘贴到这里,但它有我的私有 API 密钥)
  • p 是我的函数,所以 $.getJSON("api.sensis.com.au/ob-20110511/test/…", function(p) {
  • 我不明白你的第一条评论。我的建议没有帮助?使用第二个索引器 ([..]) 访问数组以获取名称时它不起作用?
  • 嗨亚当,我正在回复其他一些人,对不起:(我现在要试试你的解决方案:)
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 2019-10-24
  • 2021-05-27
相关资源
最近更新 更多