Создание JSON в Python и разбор в Java - PullRequest
1 голос
/ 02 ноября 2011

Мое приложение включает в себя отправку JSON с внутреннего сервера RESTful Python на устройство Android через HTTP-запросы.Тем не менее, я продолжаю получать JsonParseException.Вот как создается и возвращается JSON:

articleList = []
obj = Content.objects.filter(id = 332).values()[0]
articleList.append(obj)     
data = {'articleList' : articleList}        
return simplejson.dumps(data)

JSON выглядит следующим образом:

{\"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}
    ]
}

Когда я копирую и вставляю эту строку в Java, она работает, поэтому я неНе думаю, что проблема связана со структурой.

На клиенте я использую библиотеку GSON для анализа JSON:

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}

Я думаю, что мог быполучить это исключение из-за неэкранированных кавычек, но я не знаю, как с этим справиться.Я даже пытался декодировать JSON перед преобразованием в объект ArticleList.

1 Ответ

2 голосов
/ 02 ноября 2011

Вставка строки JSON, которую вы предоставили, в строку программы Java, работает - из-за того, что кавычки (действующие как символы завершения нотации строки) экранированы. Эти кавычки должны, однако, не быть экранированными при чтении JSON из внешнего ресурса (поток, документ или аналогичный), и поэтому JSON должен иметь следующий вид:

{"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}
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...