解析JSON文件POJO使用杰克逊
问题描述:
我充满了叽叽喳喳的鸣叫一个JSON文件,如下所示:解析JSON文件POJO使用杰克逊
{"text": "RT @7NewsSydney: Fire rips through party island Ibiza. #7News, "lang": "en", "coordinates": { "coordinates": [150.595679, -34.187708] , "type":"Point"}, "created_at": "Mon Mar 06 22:47:10 +0000 2017"}
{"text": "Fire rips through party island Ibiza. #7News ", "user": {"id": "156464691", "name": "7 News Sydney"}, "lang": "en","created_at": "Mon Mar 06 22:43:11 +0000 2017"}
我想将它们转换成POJO,我已经定义了微博类
import java.io.*;
import java.util.*;
import com.fasterxml.jackson.databind.*;
public class Tweets {
private int id;
private String username;
private String text;
private int coordinates;
private String timestamp;
}
ObjectMapper mapper = new ObjectMapper();
Tweets tweets = mapper.readValue(new File(tweets.json), Tweets.class);
我有这个麻烦 1.推文不一样,例如,第一条推文有一个坐标键值,第二条推文没有。
此解析技术是否正确?有人可以帮助
答
坐标应该有不同的定义(它不是一个整数,而是一个double和一个字符串数组的组合对象)。 如果您想要解析文件中定义的多个JSON对象,则必须逐行执行,因为它不是JSON数组,而是每行包含JSON对象的一系列行。我会将该类重命名为Tweet,并在Tweet列表中添加逐行解析的推文。 如果没有坐标,它不是问题,如果不存在,它们将被设置为空。如果你最终不想输出它们,你可以使用注释@JsonInclude(JsonInclude.Include.NON_NULL)在类的顶部
我敢肯定,如果文件不包含tweet对象一个无效的json数组,因此映射程序无法解析它 - 并且无法将_two_ tweet分析为_one_ pojo。你可能想要分割你的文件(例如按行)或重构它以包含顶层数组,然后将其解析为'Tweets []'。 – Thomas
你是什么意思由此“我敢肯定,如果该文件不包含数组中不是有效的json,因此映射器无法解析它的tweet对象”,是的,我想读它的行按行,那么我该怎么做? – Kutam
我的意思是'{...} {...}'不是有效的json,它应该是'[{..},{...}]'。但是,如果你想逐行阅读文件,应该没问题,因为你每行只有一个json对象。你应该寻找如何逐行阅读文件。我会给你一个提示:'BufferedReader'。 – Thomas