【问题标题】:JSON Array to Java objectsJSON 数组到 Java 对象
【发布时间】:2015-02-22 01:14:57
【问题描述】:

我需要解析一个如下所示的 JSON 文件:

[
  {
    "y": 148, 
    "x": 155
  }, 
  {
    "y": 135, 
    "x": 148
  }, 
  {
    "y": 148, 
    "x": 154
  }
]

我想把这些 X 坐标和 Y 坐标放到一个 JavaObject Click 中,那个类看起来像这样:

public class Click {
    int x;
    int y;

    public Click(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}

我查看了 gson,因为他们说它很容易,但我不明白如何从我的文件中做到这一点。

【问题讨论】:

  • [] 是一个数组,{} 是一个对象。

标签: java json parsing arraylist gson


【解决方案1】:

假设您的 json 字符串数据存储在名为 jsonStr 的变量中:

String jsonStr = getJsonFromSomewhere();
Gson gson = new Gson();
Click clicks[] = gson.fromJson(jsonStr, Click[].class);

【讨论】:

    【解决方案2】:

    查看 Gson API 和一些示例。我已经把链接放在下面了!

    String jsonString = //your json String
    Gson gson = new Gson();
    Type typeOfList = new TypeToken<List<Map<String, Integer>>>() {}.getType();
    List<Map<String, Integer>> list = gson.fromJson(jsonString, typeOfMap);
    
    List<Click> clicks = new ArrayList<Click>();
    for(int i = 0; i < list.size(); i++) {
        int x = list.get(i).get("x");
        int y = list.get(i).get("y");
        clicks.add(new Click(x, y));
    }
    

    (http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html) (http://google-gson.googlecode.com/svn/tags/1.5/src/test/java/com/google/gson/functional/MapTest.java)

    【讨论】:

    • 现在我有了这个:private static final String filePath = ".\\data.json"; BufferedReader br; Gson gson = 新 Gson();点击 click = gson.fromJson(br, Click.class); System.out.println(点击);但它仍然说我的 json 文件有错误的起始对象和结束对象
    • 我不确定 BufferedReader 在该方法中是如何工作的。我不知道你能做到这一点。这可能就是您收到错误的原因。
    • 你是否坚持将 json 转换为字符串?
    【解决方案3】:

    另一个可靠的选项是Jackson,它似乎有一个非常可靠的教程。我不熟悉它,所以我希望这会有所帮助。

    主要思想是它使用对象映射器

    ObjectMapper mapper = new ObjectMapper();
    User user = mapper.readValue(new File("c:\\user.json"), User.class);
    

    第 4 步应该是你最好的选择,只要意识到你可能想要 User.class 以外的东西

    编辑:

    如果您已经准备好使用 Gson,也许查看其他类似的答案会有所帮助。 This question 是关于将 JSON 转换为 POJO(普通旧 Java 对象),它们更像是浮动的。再说一次,我对这些不是很熟悉,我可以尝试回答一些问题,但我希望这能让你到达你需要去的地方。

    编码愉快!如果您有任何问题,请发表评论。

    【讨论】:

    • 是的,我知道 Jackson 存在,但 gson 似乎对用户更友好,使用起来更快,但我就是不明白,User.class 将是 Click.class,我在 gson 中已经知道据我所知
    • 要让 Jackson 工作,您还需要为您的班级提供一个空的构造函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2019-05-03
    • 2019-03-27
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2020-03-31
    相关资源
    最近更新 更多