使用Factual地理数据时的JSON格式问题

时间:2011-09-25 19:59:26

标签: json attributes

我正在使用Factual api来获取位置数据。他们的restful服务以JSON格式返回数据如下,但他们没有使用“通常的”JSON格式。没有属性键,而是有一个“字段”来解释所有字段键。

所以问题是如何检索我需要的属性?如果可能请举个例子。提前谢谢。

{
    "response": {
        "total_rows": 2,
        "data": [
            [
                "ZPQAB5GAPEHQHDy5vrJKXZZYQ-A",
                "046b39ea-0951-4add-be40-5d32b7037214",
                "Hanko Sushi Iso Omena",
                60.16216,
                24.73907
            ],
            [
                "2TptHCm_406h45y0-8_pJJXaEYA",
                "27dcc2b5-81d1-4a72-b67e-2f28b07b9285",
                "Masabi Sushi Oy",
                60.21707,
                24.81192
            ]
        ],
        "fields": [
            "subject_key",
            "factual_id",
            "name",
            "latitude",
            "longitude"
        ],
        "rows": 2,
        "cache-state": "CACHED",
        "big-data": true,
        "subject_columns": [
            1
        ]
    },
    "version": "2",
    "status": "ok"
}

3 个答案:

答案 0 :(得分:1)

// Field map
var _subject_key = 0,
    _factual_id  = 1,
    _name        = 2,
    _latitude    = 3,
    _longitude   = 4;

// Example: 
alert(_json.response.data[0][_factual_id]);

演示:http://jsfiddle.net/AlienWebguy/9TEJJ/

答案 1 :(得分:1)

如果您知道字段名称,并且不保证数据保持相同的顺序,我会对数据进行转换,以便我可以按名称引用字段:

var fieldIndex = {}
for (key in x.response.fields)
{
    fieldIndex[x.response.fields[key]] = key;
}

for (key in x.response.data)
{
    alert(x.response.data[key][fieldIndex.name]);
}

答案 2 :(得分:0)

我在Factual工作。只是想提一下,我们已经推出了我们API的第3版测试版。版本3通过包含与结果内联的属性键直接解决了这个问题,正如您所希望的那样。 (您的问题适用于我们API的第2版。如果您能够升级到版本3,您还会发现其他一些不错的改进。; - )