2010-05-31 5 views
0

J'essaye d'eval() un json ayant des caractères speacial - et obtenant l'erreur de «littéral de chaîne non terminée» dans Firefox 3.5.9 Bien que la même chose fonctionne très bien sur IE. 7. J'ai défini le codage de caractères à UTF-8 dans les deux navigateurs. Une idée pourquoi c'est une erreur dans FF?littéral de chaîne sans terminaison sur json eval

également droit avant de convertir la chaîne en JSON, j'ai couru ce code en Java

String jsonString = //some json string having 
 
for(byte b : jsonString.getBytes()){ 
    System.out.print(Integer.toHexString(b) + " "); 
} 
net.sf.json.JSON jsonObject = net.sf.json.JSONSerializer.toJSON(jsonString); 

Et o/p pour les caractères ci-dessus est

ffffffe2 ffffff80 ffffffa8 respectivement. Comment savoir si ce sont des caractères UTF-8 valides?

+0

La chaîne JSON exacte qui résulte de l'erreur serait utile. – Aistina

Répondre

0

Essayé en utilisant gson API pour java-to-json. Et fonctionne bien. Affichage des deux jsons résultants.

résultant JSON en utilisant JSON-lib (donne erreur littérale de chaîne non terminée)

var json = {"addToSessionFlag":false,"addToShoppingCart":false,"allMessageCodes":"IXMANAGER__PARSING_STATUS#","beanKey":"","cacheFlag":false,"callBackData":{"IXMANAGER_PARSER_ERROR_LIST":[{**"cellData":"
34295"**,"columnHeader":"","columnNumber":8,"errorMessage":"Error : Invalid Zip Code","rowNumber":1},{"cellData":"","columnHeader":"","columnNumber":9,"errorMessage":"Error : Invalid Contact Person","rowNumber":1},{"cellData":"+90-(0)212-4113838
","columnHeader":"","columnNumber":10,"errorMessage":"Error : Invalid Phone Numbers","rowNumber":1},{"cellData":"[email protected]","columnHeader":"","columnNumber":12,"errorMessage":"Error : Invalid Email Address","rowNumber":1},{"cellData":"41.000792,28.802633","columnHeader":"","columnNumber":14,"errorMessage":"Error : Invalid Website","rowNumber":1},{"cellData":"15:00 p.m","columnHeader":"","columnNumber":19,"errorMessage":"Error : Invalid Hotel Check-In/Check-Out Time","rowNumber":1},{"cellData":"12:00 p.m","columnHeader":"","columnNumber":20,"errorMessage":"Error : Invalid Hotel Check-In/Check-Out Time","rowNumber":1}]}}; 

var test = eval(json); 
alert(test); 

résultant JSON en utilisant gson (succesful eval. Fonctionne!)

var json = {"keyId":0,"sSuccessType":"||ERR||","sSuccessMessage":"Parsing Failed\u003cBR /\u003e","_bAddToSessionFlag":false,"bCacheFlag":false,"success":false,"callBackData":{"IXMANAGER_PARSER_ERROR_LIST":[{"_iRowNumber":1,"_iColumnNumber":8,**"_sCellData":"\u202834295"**,"_sErrorMessage":"Error : Invalid Zip Code"},{"_iRowNumber":1,"_iColumnNumber":9,"_sErrorMessage":"Error : Invalid Contact Person"},{"_iRowNumber":2,"_iColumnNumber":9,"_sErrorMessage":"Error : Invalid Contact Person"},{"_iRowNumber":1,"_iColumnNumber":10,"_sCellData":"+90-(0)212-4113838\u2028","_sErrorMessage":"Error : Invalid Phone Numbers"},{"_iRowNumber":1,"_iColumnNumber":12,"_sCellData":"[email protected]","_sErrorMessage":"Error : Invalid Email Address"},{"_iRowNumber":2,"_iColumnNumber":12,"_sCellData":"[email protected]","_sErrorMessage":"Error : Invalid Email Address"},{"_iRowNumber":1,"_iColumnNumber":14,"_sCellData":"41.000792,28.802633","_sErrorMessage":"Error : Invalid Website"},{"_iRowNumber":2,"_iColumnNumber":14,"_sCellData":"40.971911,28.871362","_sErrorMessage":"Error : Invalid Website"},{"_iRowNumber":1,"_iColumnNumber":19,"_sCellData":"15:00 p.m","_sErrorMessage":"Error : Invalid Hotel Check-In/Check-Out Time"},{"_iRowNumber":2,"_iColumnNumber":19,"_sCellData":"14:00 p.m","_sErrorMessage":"Error : Invalid Hotel Check-In/Check-Out Time"},{"_iRowNumber":1,"_iColumnNumber":20,"_sCellData":"12:00 p.m","_sErrorMessage":"Error : Invalid Hotel Check-In/Check-Out Time"},{"_iRowNumber":2,"_iColumnNumber":20,"_sCellData":"12:00 p.m","_sErrorMessage":"Error : Invalid Hotel Check-In/Check-Out Time"}]}}; 
var test = eval(json); 
alert(test); 

Bien que ce n'est pas la solution complète à mon problème car je pense que gson utilise des variables de classe directement au lieu de getters au moment de la sérialisation json. Des pensées à ce sujet?

+0

On dirait que votre chaîne d'origine n'est pas JSON. Tout caractère sécurisé non-ASCII dans JSON doit être codé en utilisant sa séquence d'échappement Unicode (\ uXXXX). La première chaîne n'a pas ce codage correctement, donc c'est un problème avec votre encodeur. – bluesmoon

Questions connexes