【问题标题】:Trying to parse JSON that is nested using Gson尝试解析使用 Gson 嵌套的 JSON
【发布时间】:2011-12-23 04:34:28
【问题描述】:

这是我想要做的:

public static final String json = "[{'quotes':[{'quote':'sdfsdfsdfdsf!','source':'sdfsdfsdfsdfsdf'},{'quote':'sdfsdfsdfsdf!','source':'-sdfsfsdf'},{'quote':'Isdfsf','source':'sfsfsf'}]}]";

Gson gson = new Gson();
        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(json).getAsJsonArray();

       Event event = gson.fromJson(array.get(0), Event.class);


        System.out.println("Using Gson.fromJson() to get:" + event.getQuotes());

这里是 Event 类:

static class Event {
        private JsonArray quotes;
        private Event(JsonArray quotes) {
        this.quotes = quotes;

        }
        public JsonArray getQuotes() {
            return quotes;
        }
        public void setQuotes(JsonArray quotes) {
            this.quotes = quotes;
        }

      }

本质上,我正在尝试解析内容。抓住“引号”并将内容放在另一个 JsonArray 中,不是吗?但是,该应用程序崩溃了,因为我认为它不是这样工作的。

有什么想法吗?我一直在努力解决这个问题。

【问题讨论】:

  • 如果可以使用原生 JSON 类来完成呢?请让我知道,所以我建议一个解决方案。
  • 您能告诉我们您遇到了什么错误吗?日志猫说什么?

标签: android gson


【解决方案1】:

您的 JSON 字符串无效,请在此处查看:http://jsonlint.com/

所以首先你的 JSON 字符串应该是这样的:

[{"quotes":[{"quote":"sdfsdfsdfdsf!","source":"sdfsdfsdfsdfsdf"},
{"quote":"sdfsdfsdfsdf!","source":"-sdfsfsdf"},{"quote":"asdfsf","source":"sfsfsf"}]}]

如果你想存储在 String 变量中:

public static final String json = "[{\"quotes\":[{\"quot\e":\"sdfsdfsdfdsf!\",\"source\":\"sdfsdfsdfsdfsdf\"},
    {\"quote\":\"sdfsdfsdfsdf!\",\"source":\"-sdfsfsdf\"},{\"quote\":\"asdfsf\",\"source\":\"sfsfsf\"}]}]";

使用 Native Classes 解析 JSON(不使用 GSON 或任何 API):

JsonObject obj = new JsonObject(json);
JsonArray array = obj.getJsonArray("quotes");

for(int i=0; i<array.length; i++)
{
   JsonObject subObj = array.getJsonObject(i);
   String strQuotes = subObj.getString("quote");
   String strSource = subObj.getString("source");
}

【讨论】:

    【解决方案2】:

    我正在尝试解析内容。抓住“引号”并将内容放在另一个 JsonArray 中

    我会采取不同的方法来处理这个数据结构,除非有一些令人信服的理由不这样做。

    既然可以使用 Gson,那就把它用在它擅长的地方,忘记处理 JsonArray 和 JsonObject 等 JSON API 组件。 Gson 非常适合非常简单地将 JSON 数据绑定到 Java 数据结构。因此,我可能会采用类似于以下的方法,然后允许对 Java 数据结构进行简单的操作,而无需考虑 JSON。

    输入 JSON

    [
        {
            "quotes": [
                {
                    "quote": "I never think of the future. It comes soon enough.",
                    "source": "Albert Einstein"
                },
                {
                    "quote": "A riot is the language of the unheard.",
                    "source": "Martin Luther King, Jr."
                },
                {
                    "quote": "A hero is someone who understands the responsibility that comes with his freedom.",
                    "source": "Bob Dylan"
                }
            ]
        }
    ]
    

    Java 代码

    import java.io.FileReader;
    
    import com.google.gson.Gson;
    
    public class GsonFoo
    {
      public static void main(String[] args) throws Exception
      {
        Gson gson = new Gson();
        Event[] events = gson.fromJson(new FileReader("input.json"), Event[].class);
        System.out.println(events[0].quotes[0].quote);
        System.out.println(events[0].quotes[0].source);
      }
    }
    
    class Event
    {
      Quote[] quotes;
    }
    
    class Quote
    {
      String quote;
      String source;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多