Создание JSON в Python и разбор в Java

1

Мое приложение включает отправку 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.

  • 0
    Хм, ну ... да, это не действительно JSON. Видишь все эти обратные слеши? Мало того, вы, кажется, соединяете строки sevel вместе с символами новой строки, а затем ожидаете, что это будет действительный JSON, чего тогда не было бы.
  • 0
    Двойные кавычки были экранированы в Python, но я не уверен, как их избежать, поскольку URL.decoder, похоже, не справился с задачей.
Показать ещё 4 комментария
Теги:
gson

1 ответ

2

Вставка строки JSON, которую вы предоставили в строку Java-программы, работает - из-за того, что кавычки (действующие как символы окончания записи строк) экранированы. Эти кавычки не должны hoever быть экранированы, при чтении 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}
    ]
}
  • 0
    Спасибо за ответ! Я исправил проблему, изменив код возврата в коде Python на HttpResponse (json.dumps (data), mimetype = "application / json")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню