Преобразовать строку JSON в объект Java / Python (Jython)? - PullRequest
2 голосов
/ 29 апреля 2011

Эй, ребята, я все еще новичок в кодировании, связанном с Android и StackOverflow в целом, так что не будьте слишком резкими со мной, но я не смог найти вопрос, подобный этому, уже заданный здесь. : - /

Итак, я понимаю, что вы можете конвертировать строки JSON в строки и обрабатывать объекты JSON в целом с помощью пакета org.json в Android, но здесь моя текущая ситуация:

Мне нужно взять строку JSON с определенного URL (я уже могу успешно это сделать) и превратить ее в массив. Ну на самом деле два массива. Фреймворк, который я использую, работает на Python и возвращает dict, содержащий списки (массивы в Python). Однако он отображается как объект JSON. Вот пример того, что я получу от URL к моему Java-коду:

{"keywords": ["middle east", "syria"], "link": [["middle east", "http://www.google.com/#q=middle east"], ["syria", "http://www.google.com/#q=syria"]]}

Как видите, это диктат двух индексов. Первый - это «ключевые слова», в котором есть список, а второй - «ссылка», которая содержит список списков. Два списка (первый и второй многомерный) - это то, чем я хочу манипулировать в Java. Я знаю, что вы можете использовать JSONArray, но проблема в том, что массивы хранятся в Python dict, а мое приложение для Android неправильно создает JSONArray. Ребята, у вас есть идеи, как я могу справиться с этим? Я довольно потерян. Вот мой код для получения фактической строки JSON (URL-адрес в коде доступен не всем, его обслуживают вставкой на моем компьютере):

static public void refreshFeed(){
    try{
        String url = "http://192.17.178.116:8080/getkw?nextline="+line;
        line++;
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        HttpResponse response;
        response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        InputStream in = entity.getContent();

        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder sb = new StringBuilder();

        String input = null;
        try {
            while ((input = reader.readLine()) != null) {
            sb.append(input + "\n");
            }
        } catch (IOException e) {
                e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
         }
        String enter = sb.toString();
        feedEntry add = new feedEntry(enter);
        addNewEntry(add);
        in.close();

    } catch(MalformedURLException e){
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

Обратите также внимание, что это без , JSONString превращается в JSONArray. Он просто переводит объект JSON в обычную строку, которая добавляется к объекту feedEntry.

1 Ответ

3 голосов
/ 29 апреля 2011

Отображение python dict в массив json - это больше работы, чем вы ожидаете. Было бы лучше сделать это либо объектом json, либо начать со списка, который можно отобразить прямо в массив json. Информация о сериализации между Python и Java .

Вот пример кода, где я создаю структуру списка в Python, а затем извлекаю ее в приложении для Android:

#!/usr/bin/python

print "Content-type: text/html\n\n"

import json
from collections import defaultdict

mystuff = list()
mystuff.append( ('1', 'b', 'c', 'd') )
mystuff.append( ('2', 'f', 'g', 'h') )

stufflist = list()

for s in stufflist:
    d = {}
    d['a'] = s[0]
    d['b'] = s[1]
    d['c'] = s[2]
    d['d'] = s[3]
    stufflist.append(d)

print json.write(stufflist)

А в Android:

// Convert the string (sb is a string butter from the http response) to a json array. 
JSONArray jArray = new JSONArray(sb.toString());

for(int i = 0; i < jArray.length(); i++){
    // Get each item as a JSON object. 
    JSONObject json_data = jArray.getJSONObject(i);

    // Get data from object ... 
    Int a = json_data.getInt("a");
    String b = json_data.getString("b");
    String c = json_data.getString("c");
    String d = json_data.getString("d");

    // Do whatever with the data ... 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...