내 응용 프로그램에는 RESTful Python 백엔드 서버에서 HTTP 요청을 통해 Android 장치로 JSON을 보내는 작업이 포함됩니다. 그러나, 나는 계속 JsonParseException을 얻는다. 여기에 어떻게 JSON 생성 및 반환되는 경우 : JSON은 다음과 같습니다Python에서 JSON 만들기 및 Java 구문 분석
articleList = []
obj = Content.objects.filter(id = 332).values()[0]
articleList.append(obj)
data = {'articleList' : articleList}
return simplejson.dumps(data)
을 :
{\"articleList\":
[
{\"ArticleName\": \"Test_ArticleName\\n\", \"ArticleText\":\"Test_ArticleText\"
,\"Author\": \"Test_Author\\n\", \"SourceID\": 18, \"Image\": \"NULL\", \"ImageLink\": \"NULL\", \"Video\": \"NULL\", \"PublicationDate\": \"8/15/2011 4:00AM\", \"VideoLink\": \"NULL\\n\", \"NumViews\": 0, \"Type\": \"NULL\", \"id\": 332}
]
}
내가 복사 자바에이 문자열을 붙여 작동 그래서 문제를 생각하지 않는다 구조와 관련이있다.
클라이언트에내가 JSON 구문 분석 GSON 라이브러리를 사용하고 있습니다 :
이ArticleList articleList;
InputStream source = retrieveStream(urlStr);
Gson gson = new GsonBuilder().setVersion(1.0).create();
String json = convertStreamToString(source);
try {
json = URLDecoder.decode(json,"UTF-8");
articleList = gson.fromJson(json, ArticleList.class);
} catch (UnsupportedEncodingException e1) {
Log.e(TAG,"Decoding error: "+e1);
} catch (JsonParseException e) {
Log.e(TAG, "Parsing error: "+e);
}
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
Log.i(TAG, sb.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
내 ArticleList.class 그냥
List<Article> articleList
를 포함하고 내 Article.class이 모든 열쇠 "ArticleName"를 포함을 "ArticleText", 등등 내가 무엇입니까
는 예외입니다 :
Parsing error: com.google.gson.JsonParseException: Expecting object found: "{\"articleList\": [{\"ArticleName\": \"Test_ArticleName\\n\", \"ArticleText\": \"Test_ArticleText\", \"Author\": \"Test_Author\\n\", \"SourceID\": 18, \"Image\": \"NULL\", \"ImageLink\": \"NULL\", \"Video\": \"NULL\", \"PublicationDate\": \"8/15/2011 4:00AM\", \"VideoLink\": \"NULL\\n\", \"NumViews\": 0, \"Type\": \"NULL\", \"id\": 332}
나는 이스케이프 처리되지 않은 이스케이프 때문에이 예외가 발생할 수 있다고 생각하지만 어떻게 처리해야할지 모르겠다. ArticleList 객체로 변환하기 전에 JSON을 디코딩 해봤습니다.
음을, 음 ... 그래, 그건 :이 따옴표는 가가 외부 자원 (Stream에, 문서 또는 유사한)에서 JSON을 읽기 및 JSON 따라서 읽어야 할 때, 이스케이프하지 hoever한다 유효하지 않은 JSON입니다. 모든 백 슬래시를 볼 수 있습니까? 뿐만 아니라 줄 바꿈과 함께 줄 바꿈을 연결 한 다음 올바른 JSON이 될 것으로 기대합니다. 그러면 JSON은 유효하지 않습니다. –
큰 따옴표는 파이썬에서 이스케이프 처리되었지만 URL.decoder가 트릭을 수행하지 않았으므로 탈출 방법을 잘 모르겠습니다. – slouie
"NULL"값이 실제로 Java에서 Null로 처리된다고 생각합니까? – Lachezar