Обработка ответа в KRL - PullRequest
       5

Обработка ответа в KRL

3 голосов
/ 18 декабря 2010

Я отправляю запрос в Google через их API, используя KRL, и вот буквальный ответ, который я получаю от них:

handleResponse({ "data": { "responses": [ { "response": "successful" } ] } } );

Как вы рекомендуете обрабатывать это с помощью выбора как естьневерный синтаксис JSON?Он содержит допустимый синтаксис JSON, но в целом недопустим.Спасибо за вашу помощь.

1 Ответ

5 голосов
/ 18 декабря 2010

Обновление: после просмотра API перевода Google выглядит, что параметр обратного вызова JSONP является необязательным.Не указывайте обратный вызов, и у вас больше не будет этой проблемы.:)

http://code.google.com/apis/language/translate/v2/using_rest.html#WorkingResults

Лучший вариант:

Если вы можете, укажите в своем вызове API Google, что функция обратного вызова отсутствует,Если вы можете просто запросить простой JSON вместо JSONP, вы можете просто использовать оператор выбора.

Не лучший вариант:

Если API возвращает только JSONP, тогда вы можетезамените регулярное выражение, чтобы удалить заполнение из JSON, что позволит вам использовать оператор выбора.

Что вам понадобится:

Полный пример приложения:

ruleset a60x494 {
  meta {
    name "jsonp-to-json-test"
    description <<
      jsonp-to-json-test
    >>
    author "Mike Grace"
    logging on
  }

  global {
    returnedJsonpAsString = 'handleResponse({ "data": { "responses": [ { "response": "successful" } ] } } );';
    datasource googleApi <- "blah blah blah";
  }

  rule fix_jsonp_to_json {
    select when pageview ".*"
    pre {
      cleanJson = returnedJsonpAsString.replace(re/^.*\((.*)\);/,"$1");
      response = cleanJson.decode().pick("$..response");
    }
    {
      notify("Response",response) with sticky = true;
      emit <|
        console.log(returnedJsonp);
        console.log(cleanJson);
      |>;
    }
  }
}
...