[英]JSON or JSONP query to retrieve data
關於此類問題,SO上有很多問題,例如:
但是我似乎無法讓他們中的任何一個返回明智的結果。
我已經獲得了一個API調用過程來使用(我相信它基於REST API)從服務器檢索值,它看起來像這樣:
http://stage.xxxxxxxxx.co.uk/Search/?q=london&srid=3857&format=json&api_key=xxxxxxxxxxxxxxxxxxxxxxxx
出於明顯的原因,我不得不使用xxxxx,尤其是對於密鑰。
將此內容提交到諸如IE之類的Web瀏覽器將返回看起來像是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因為使用了“相同的域”而無法使用,所以我轉向JSONP,但是我無法理解如何正確使用它。
例如,我有這個:
$.getJSON("http://stage.xxxxxxxxxxx.co.uk/Search/?q=london&srid=3857&format=json&api_key=xxxxxxxxxxxxxxxxxxxxxxxxx?callback=?", function(result) {
format: "json"
});
我從哪里可以得到上面提到的JSON對象?
我很快發現XMLHttpRequest因為使用了“相同的域”而無法使用,所以我轉向JSONP,但是我無法理解如何正確使用它。
除非您正在調用的端點支持JSONP,並且您告訴它這就是您所要求的,否則您不能使用JSONP。 這是因為它必須發送回不同的格式(JSONP而不是JSON)。
盡管看起來幾乎相同,但JSON和JSONP根本不同。 JSON響應是一種文本格式,根據JSON標准定義數據(在http://json.org上有詳細記錄,更正式的地方是RFC)。 JSONP響應是傳入JavaScript對象的函數調用 ,該JavaScript對象應作為腳本代碼執行。
這是一個簡單的理論性JSON查詢和響應的示例:
要求: http://example.com/give-me-deh-stuff?format=json&id=foo
: 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
: 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
: 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就是這樣避免了相同來源策略。
可以通過JSON.NET通過JsonSchema對象完成
下面是一個從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
這只是一種簡單的獲取數據的方法...有很多方法可以獲取數據以獲取更多詳細信息,請單擊此處以獲取JSON.NET的文檔以處理JSON數據。
我希望我的回答是有幫助的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.