0

我希望 Gson 能够反序列化这个 JSON 字符串,如果没有,我认为 Gson 会抛出异常。但这些都不是。Gson 只是返回 null。如何使用 Gson 反序列化这个 JSON 字符串?

public class Program {

    public static class TermsAndConditions {
        public Paragraph[] paragraphs;
    }

    public static class Paragraph {
        public String title;
        public Clause[] clauses;
    }

    public static class Clause {
        public String title;
        public String text;
    }

    private static final String json = "{\r\n"
            + "    \"paragrahps\": [\r\n"
            + "        {\r\n"
            + "            \"title\": \"Allgemeines \\u00a7 01\",\r\n"
            + "            \"clauses\": [\r\n"
            + "                {\r\n"
            + "                    \"title\": \"01. Absatz\",\r\n"
            + "                    \"text\": \"Nachstehende Allgemeine Gesch\\u00e4ftsbedingungen (AGB) gelten f\\u00fcr alle, auch zuk\\u00fcnftigen, Vertr\\u00e4ge, Lieferungen und sonstigen Leistungen der Firma Queen of Catwalk GmbH, In den Kuhwiesen 10, 76149 Karlsruhe (Nachstehend: Queen of Catwalk), gegen\\u00fcber ihren gewerblichen Kunden. Es gilt stets die zum Zeitpunkt der Bestellung g\\u00fcltige Fassung der AGB.\"\r\n"
            + "                },\r\n"
            + "                {\r\n"
            + "                    \"title\": \"02. Absatz\",\r\n"
            + "                    \"text\": \"Abweichende Vorschriften der Kunden werden hiermit widersprochen; andere Bedingungen werden nicht Vertragsinhalt, auch dann nicht, wenn wir ihnen nicht ausdr\\u00fccklich widersprechen.\"\r\n"
            + "                },\r\n"
            + "                {\r\n"
            + "                    \"title\": \"03. Absatz\",\r\n"
            + "                    \"text\": \"Die Gesch\\u00e4ftsbedingungen zwischen Queen of Catwalk und dem Kunden unterliegen dem Recht der Bundesrepublik Deutschland unter Ausschluss des UN Kaufrechts. Als Gerichtsstand ist Karlsruhe vereinbart, soweit es sich beim K\\u00e4ufer um einen Kaufmann im Sinne des HGB handelt. Ist der K\\u00e4ufer kein Kaufmann im Sinne des HGB, bleibt es bei der gesetzlichen Regelung \\u00fcber den Gerichtsstand.\"\r\n"
            + "                }\r\n" + "            ]\r\n" + "        }\r\n" + "    ]\r\n" + "}";

    public static void main(String[] args) {
        TermsAndConditions t = fromJson(json, TermsAndConditions.class);
        System.out.println(t);
    }

    private static <T> T fromJson(final String json, final Class<T> classOfT) throws JsonParseException {
        Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL, DateFormat.FULL).create();
        T object = gson.fromJson(json, classOfT);
        return object;
    }
}
4

1 回答 1

2

我真的发现了!

它只是一个错字!在你的 json-String 中调用它paragrahps(可能是错误的),在你的TermsAndConditions类中调用它paragraphs。ph切换到hp。

顺便说一句:如果你给它提供格式良好的 JSON,Gson 不会抛出任何异常。非常可悲的是strict,如果它找不到一些关键,没有一个选项或类似的东西会迫使它抛出

试试这样:

public class Program {

    public static class TermsAndConditions {
        public Paragraph[] paragraphs;
    }

    public static class Paragraph {
        public String title;
        public Clause[] clauses;
    }

    public static class Clause {
        public String title;
        public String text;
    }

    private static final String json = "{\r\n"
            + "    \"paragraphs\": [\r\n"
            + "        {\r\n"
            + "            \"title\": \"Allgemeines \\u00a7 01\",\r\n"
            + "            \"clauses\": [\r\n"
            + "                {\r\n"
            + "                    \"title\": \"01. Absatz\",\r\n"
            + "                    \"text\": \"Nachstehende Allgemeine Gesch\\u00e4ftsbedingungen (AGB) gelten f\\u00fcr alle, auch zuk\\u00fcnftigen, Vertr\\u00e4ge, Lieferungen und sonstigen Leistungen der Firma Queen of Catwalk GmbH, In den Kuhwiesen 10, 76149 Karlsruhe (Nachstehend: Queen of Catwalk), gegen\\u00fcber ihren gewerblichen Kunden. Es gilt stets die zum Zeitpunkt der Bestellung g\\u00fcltige Fassung der AGB.\"\r\n"
            + "                },\r\n"
            + "                {\r\n"
            + "                    \"title\": \"02. Absatz\",\r\n"
            + "                    \"text\": \"Abweichende Vorschriften der Kunden werden hiermit widersprochen; andere Bedingungen werden nicht Vertragsinhalt, auch dann nicht, wenn wir ihnen nicht ausdr\\u00fccklich widersprechen.\"\r\n"
            + "                },\r\n"
            + "                {\r\n"
            + "                    \"title\": \"03. Absatz\",\r\n"
            + "                    \"text\": \"Die Gesch\\u00e4ftsbedingungen zwischen Queen of Catwalk und dem Kunden unterliegen dem Recht der Bundesrepublik Deutschland unter Ausschluss des UN Kaufrechts. Als Gerichtsstand ist Karlsruhe vereinbart, soweit es sich beim K\\u00e4ufer um einen Kaufmann im Sinne des HGB handelt. Ist der K\\u00e4ufer kein Kaufmann im Sinne des HGB, bleibt es bei der gesetzlichen Regelung \\u00fcber den Gerichtsstand.\"\r\n"
            + "                }\r\n" + "            ]\r\n" + "        }\r\n" + "    ]\r\n" + "}";

    public static void main(String[] args) {
        TermsAndConditions t = fromJson(json, TermsAndConditions.class);
        System.out.println(t);
    }

    private static <T> T fromJson(final String json, final Class<T> classOfT) throws JsonParseException {
        Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL, DateFormat.FULL).create();
        T object = gson.fromJson(json, classOfT);
        return object;
    }
}
于 2013-09-13T12:41:49.117 回答