【问题标题】:Gson deserialisation returns an Object that contains nullGson 反序列化返回一个包含 null 的 Object
【发布时间】:2013-09-13 12:32:05
【问题描述】:

我希望 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;
    }
}

【问题讨论】:

  • 你试过没有\n\r吗??
  • 是的,它只是 php-script 中的 Pretty-Print 选项

标签: java android json gson json-deserialization


【解决方案1】:

我居然发现了!

这只是一个错字!在您的 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多