3 Stimmen

Eine JSON-Zeichenkette in ein Java/Python-Objekt (Jython) umwandeln?

So verstehe ich, dass Sie JSON-Zeichenfolgen in Zeichenfolgen konvertieren und JSON-Objekte im Allgemeinen durch das org.json-Bündel in Android behandeln können, aber hier ist meine aktuelle Situation:

Ich brauche eine JSON-Zeichenfolge von einer bestimmten URL zu nehmen (ich bin bereits in der Lage, dies erfolgreich zu tun) und machen es in ein Array. Nun, eigentlich zwei Arrays. Das Framework, das ich verwende, läuft auf Python und gibt ein dict zurück, das Listen (Arrays in Python) enthält. Allerdings wird es als JSON-Objekt angezeigt. Hier ist ein Beispiel dafür, was ich von der URL in meinem Java-Code erhalten würde:

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

Wie Sie sehen, handelt es sich um ein Diktat aus zwei Indizes. Der erste ist "keywords", der eine Liste enthält, und der zweite ist "link", der eine Liste von Listen enthält. Die beiden Listen (die erste und die zweite multidimensionale Liste) möchte ich in Java bearbeiten können. Ich bin mir bewusst, dass Sie JSONArray verwenden können, aber das Problem ist, dass die Arrays in einem Python-Dict gespeichert sind, und meine Android-Anwendung nicht richtig ein JSONArray machen. Habt ihr Jungs irgendwelche Ideen, wie ich dies behandeln kann? Ich bin ziemlich verloren. Hier ist mein Code für den Erhalt der tatsächlichen JSON-Zeichenfolge (die URL im Code ist nicht für jedermann zugänglich, es wird von Paste auf meinem Rechner serviert):

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();
    }

Bitte beachten Sie auch, dass es sich um sin der JSONString wird in ein JSONArray umgewandelt. Es übersetzt das JSON-Objekt einfach in einen regulären String, der zu einem "feedEntry"-Objekt hinzugefügt wird.

3voto

Turnsole Punkte 3382

Mapping ein Python-Dict zu einem Json-Array ist ... mehr Arbeit als Sie erwarten würden. Es wäre besser, es entweder in ein Json-Objekt zu machen oder mit einer Liste zu beginnen, die direkt auf ein Json-Array abgebildet werden kann. Informationen zur Serialisierung zwischen Python und Java .

Hier ist ein Codebeispiel, in dem ich eine Listenstruktur in Python erstelle und sie dann in einer Android-Anwendung verwende:

#!/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)

Und in 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 ... 
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X