JSON 或 JSONP 查询以检索数据

JSON or JSONP query to retrieve data

SO 上有很多关于此类问题的问题,例如:

Basic example of using .ajax() with JSONP?

但我似乎无法让它们中的任何一个达到 return 一个合理的结果。

我得到了一个 API 调用过程(我相信它是基于 REST API)来从服务器检索值,它看起来像这样:

http://stage.xxxxxxxxx.co.uk/Search/?q=london&srid=3857&format=json&api_key=xxxxxxxxxxxxxxxxxxxxxxxx

出于显而易见的原因,我不得不使用 xxxxx,尤其是对于密钥。

将此提交到 IE 等 Web 浏览器 returns 似乎是 JSON 对象,如下所示:

{
    "features": [
        {
            "id": 2728329,
            "name": "LONDON",
            "city": null,
            "county": "LONDON",
            "address": "LONDON",
            "address_2": null,
            "display_text": "LONDON LONDON",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    -16004.689675,
                    6708355.967961
                ]
            },
            "lon": -16004.689675330877,
            "lat": 6708355.967960811
        }
    ]
}

我遇到的问题是尝试使用 jQuery.

将此对象检索为 JSON 对象(甚至字符串)

我很快发现 XMLHttpRequest 由于使用 'same domain' 而无法工作,所以我求助于 JSONP,但我不明白如何正确使用它。

例如,我有这个:

$.getJSON("http://stage.xxxxxxxxxxx.co.uk/Search/?q=london&srid=3857&format=json&api_key=xxxxxxxxxxxxxxxxxxxxxxxxx?callback=?", function(result) {
    format: "json"
}); 

我从这里到哪里去获取上面提到的 JSON 对象?

I quickly discovered that XMLHttpRequest doesn't work because of using the 'same domain' so I turned to JSONP, but I'm failing to understand how to use it properly.

您不能使用 JSONP 除非您调用的端点支持它,并且您告诉它这就是您所请求的。那是因为它必须发回不同的格式(JSONP 而不是 JSON)。

JSON 和 JSONP 本质上是不同的,尽管看起来非常相似。 JSON 响应是一种根据 JSON 标准定义数据的文本格式(松散地记录在 http://json.org,更正式地说,某处有一个 RFC); JSONP 响应是一个 函数调用 传入一个 JavaScript 对象,该对象将作为脚本代码执行。

这是一个简单的理论 JSON 查询和响应示例:

要求:http://example.com/give-me-deh-stuff?format=json&id=foo

回复:

{"stuff": {"foo":"bar"}}

这是一个等效的简单理论 JSONP 查询和响应的示例,其中您未指定回调名称:

请求:http://example.com/give-me-deh-stuff?format=jsonp&id=foo

回复:

callback({"stuff": {"foo":"bar"}})

..还有一个你做的地方:

要求:http://example.com/give-me-deh-stuff?format=jsonp&callback=_cb12345&id=foo

回复:

_cb12345({"stuff": {"foo":"bar"}})

如果端点支持JSONP,jQuery会很乐意提供回调函数并在URL上设置参数,你只需要告诉它参数叫什么(它假设 callback 如果你不这样做,许多 API 使用而许多其他 API 不使用)。

请注意,现在 JSONP 版本正在调用函数(callback_cb12345)。您的代码(或 jQuery)确保在全局范围内有一个具有该名称的函数可用,然后您将脚本附加到请求 URL,并在它返回时运行。这就是 JSONP 避免同源策略的方式。

可以通过 JsonSchema 对象JSON.NET完成

下面是一个从 JSON

中检索数据的简单示例
string schemaJson = @"{
  'description': 'A person',
  'type': 'object',
  'properties': {
  'name': {'type':'string'},
  'hobbies': {
  'type': 'array',
 'items': {'type':'string'}
  }
 }
}";

JsonSchema schema = JsonSchema.Parse(schemaJson);

Console.WriteLine(schema.Type);
// Object

foreach (var property in schema.Properties)
{
Console.WriteLine(property.Key + " - " + property.Value.Type);
}
// name - String
// hobbies - Array

这只是一种获取数据的简单方法...获取数据的方法有很多种 更多详情 Click here for documentaion of JSON.NET to work on JSON Data

希望我的回答对你有帮助