Geschachteltes JSON-Objekt in Android analysieren

7

Ich versuche ein JSON-Objekt zu parsen, von dem ein Teil wie folgt aussieht:

%Vor%

Und so weiter ....

Bisher kann ich sehr einfach parsen, indem ich so etwas mache:

%Vor%

Aber wenn ich es für 'name:' versuche, wird es nicht funktionieren.

Ich habe es versucht:

%Vor%

Wenn ich das versuche, bekomme ich "JSONObject [business] nicht gefunden."

Und wenn ich es versuche:

%Vor%

Ich bekomme, wie erwartet, "JSONObject [Name] nicht gefunden".

Was mache ich hier falsch? Mir fehlt etwas Grundlegendes ....

    
LuxuryMode 13.05.2011, 00:45
quelle

3 Antworten

29

Ok, ich bin ein Idiot. Das funktioniert.

%Vor%

Wenn ich nur zwei Sekunden nachdenken würde, bevor ich aufschreibe ... Jees!

    
LuxuryMode 13.05.2011, 00:51
quelle
12

Hier eine einzeilige Lösung

%Vor%     
Alecs 14.08.2014 14:38
quelle
3

Beachten Sie, dass das Serialisieren / Deserialisieren von JSON zu / von Java-Objekten nicht "manuell" erfolgen muss. Bibliotheken wie GSON und Jackson mach es sehr einfach.

import java.text.DateFormat;
import java.util.Date;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Foo { static String jsonInput = "{" + "\"offer\":{" + "\"category\":\"Salon\"," + "\"description\":\"Use this offer now to enjoy this great Salon at a 20% discount. \"," + "\"discount\":\"20\"," + "\"expiration\":\"2011-04-08T02:30:00Z\"," + "\"published\":\"2011-04-07T12:00:33Z\"," + "\"rescinded_at\":null," + "\"title\":\"20% off at Jun Hair Salon\"," + "\"valid_from\":\"2011-04-07T12:00:31Z\"," + "\"valid_to\":\"2011-04-08T02:00:00Z\"," + "\"id\":\"JUN_HAIR_1302177631\"," + "\"business\":{" + "\"name\":\"Jun Hair Salon\"," + "\"phone\":\"2126192989\"," + "\"address\":{" + "\"address_1\":\"12 Mott St\"," + "\"address_2\":null," + "\"city\":\"New York\"," + "\"cross_streets\":\"Chatham Sq & Worth St\"," + "\"state\":\"NY\"," + "\"zip\":\"10013\"" + "}" + "}" + "}" + "}";

public static void main(String[] args) throws Exception { GsonBuilder gsonBuilder = new GsonBuilder(); // gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); gsonBuilder.setDateFormat(DateFormat.LONG); Gson gson = gsonBuilder.create(); OfferContainer offerContainer = gson.fromJson(jsonInput, OfferContainer.class); System.out.println(offerContainer); } }

class OfferContainer { private Offer offer;

@Override public String toString() { return offer.toString(); } }

class Offer { private Category category; private String description; private String discount; private Date expiration; private Date published; private String rescinded_at; private String title; private Date valid_from; private Date valid_to; private String id; private Business business;

@Override public String toString() { return String.format( "[Offer: category=%1$s, description=%2$s, discount=%3$s, expiration=%4$s, published=%5$s, rescinded_at=%6$s, title=%7$s, valid_from=%8$s, valid_to=%9$s, id=%10$s, business=%11$s]", category, description, discount, expiration, published, rescinded_at, title, valid_from, valid_to, id, business); } }

enum Category { Salon }

class Business { private String name; private String phone; private Address address;

@Override public String toString() { return String.format( "[Business: name=%1$s, phone=%2$s, address=%3$s]", name, phone, address); } }

class Address { private String address_1; private String address_2; private String city; private String cross_streets; private String state; private String zip;

@Override public String toString() { return String.format( "[Address: address_1=%1$s, address_2=%2$s, city=%3$s, cross_streets=%4$s, state=%5$s, zip=%6$s]", address_1, address_2, city, cross_streets, state, zip); } }

Beachten Sie, dass eine FieldNamingPolicy zum einfachen Zuordnen von Attributnamen aus dem JSON zum Java-Code verwendet werden kann. Die LOWER_CASE_WITH_UNDERSCORES-Richtlinie funktioniert leider nicht mit JSON-Attributnamen wie "address_1".

Wenn die Leistung der JSON-Behandlung ein Problem darstellt, sehen Sie sich Jackson Vs. Gson und Ссылка

    
Programmer Bruce 13.05.2011 20:36
quelle

Tags und Links