Анализ JSON-ответа Bit.ly в Javascript (URL в ответе json) - PullRequest
1 голос
/ 07 августа 2009

Я пытаюсь извлечь shortUrl из ответа Bit.ly JSON. Проблема в том, что исходный URL-адрес включен в ответ, использование точечной нотации для обхода ответа не работает? Я могу получить другие атрибуты (errorCode, errorMessage и т. Д.), Но ничего не могу получить по результатам из-за URL. Я что-то упустил?

Это ответ:

{
    "errorCode": 0, 
    "errorMessage": "", 
    "results": {
        "http://www.google.com/": {
            "hash": "2V6CFi", 
            "shortKeywordUrl": "", 
            "shortUrl": "http://bit.ly/1F5ewS", 
            "userHash": "1F5ewS"
        }
    }, 
    "statusCode": "OK"
}

Ответы [ 5 ]

2 голосов
/ 07 августа 2009

К объектам Javascript можно получить доступ через точечную запись (obj.property) тогда и только тогда, когда имя свойства также является допустимым идентификатором Javascript.

В вашем примере, поскольку URL явно не является допустимым идентификатором, вы можете использовать другой метод, доступ в стиле массива (obj[property]):

var obj = {
   yahoo: 5
   'http://www.google.com':10
};

// Both of these work just fine.
var yahoo = obj.yahoo;
var google = obj['http://www.google.com'];
1 голос
/ 07 августа 2009

eval будет работать для анализа JSON, но часто считается небезопасным, поскольку позволяет файлу JSON выполнять любой код, который ему нравится. В этом вопросе обсуждается почему и указываются некоторые более безопасные способы анализа JSON.

0 голосов
/ 07 августа 2009

Попробуйте это:

var myJSONResponse = { "errorCode": 0, "errorMessage": "", "results": { "http://www.google.com/": { "hash": "2V6CFi", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/1F5ewS", "userHash": "1F5ewS" } }, "statusCode": "OK" };

var theShortURL = myJSONResponse.results ["http://www.google.com/"].shortUrl;

theShortURL будет содержать http://bit.ly/1F5ewS в результате.

0 голосов
/ 07 августа 2009

Из вашего образца JSON-объекта я бы ожидал, что "http://www.google.com/" будет именем подобъекта (например," результаты "). Допустим, вы заменили" http://www.google.com/" на "ссылку" вместо. Затем вы можете ссылаться на «shortUrl» следующим образом (response.results.link.shortUrl), и это будет возвращать «http://bit.ly/1F5ewS".

0 голосов
/ 07 августа 2009
var responseAsJSON = eval(jsonString);
alert(responseAsJSON.shortUrl);
...