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
希望我的回答对你有帮助
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
希望我的回答对你有帮助