2010-12-17 9 views
3

J'envoie une demande à Google via leur API en utilisant KRL et c'est la réponse littérale Je reviens d'eux:réponse Traitement en KRL

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

Comment traiter recommandez-vous ce que je via duites ce n'est pas une syntaxe JSON "valide"? Il contient une syntaxe JSON valide, mais dans son ensemble n'est pas valide. Merci de votre aide.

+0

Quelle API? Google en a quelques uns .... :) – TelegramSam

+0

Désolé. L'API de traduction. – jshakespear

+0

Quelle méthode de l'API de traduction? Pouvez-vous partager votre code de demande? L'API dispose d'une option pour utiliser JSONP ou renvoyer JSON brut. – TelegramSam

Répondre

5

Mise à jour: Après avoir regardé l'API Google translate, il semble que le paramètre de rappel JSONP soit facultatif. Ne spécifiez pas de rappel et vous n'aurez plus ce problème. :)

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

meilleure option:

Si vous pouvez, spécifier dans votre appel à l'API Google qu'il n'y ait pas de fonction de rappel. Si vous pouvez simplement demander JSON au lieu de JSONP, vous pouvez simplement utiliser l'opérateur pick.

Pas si meilleure option:

Si l'API renvoie uniquement JSONP alors vous pouvez le faire remplacer une expression rationnelle pour enlever le rembourrage du JSON qui vous permettra d'utiliser l'opérateur de sélection.

Qu'est-ce que vous aurez besoin:

exemple de l'application complète:

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); 
     |>; 
    } 
    } 
} 
Questions connexes