2017-04-11 67 views
0

我充滿了嘰嘰喳喳的鳴叫一個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.推文不一樣,例如,第一條推文有一個座標鍵值,第二條推文沒有。

此解析技術是否正確?有人可以幫助

+0

我敢肯定,如果文件不包含tweet對象一個無效的json數組,因此映射程序無法解析它 - 並且無法將_two_ tweet分析爲_one_ pojo。你可能想要分割你的文件(例如按行)或重構它以包含頂層數組,然後將其解析爲'Tweets []'。 – Thomas

+0

你是什麼意思由此「我敢肯定,如果該文件不包含數組中不是有效的json,因此映射器無法解析它的tweet對象」,是的,我想讀它的行按行,那麼我該怎麼做? – Kutam

+0

我的意思是'{...} {...}'不是有效的json,它應該是'[{..},{...}]'。但是,如果你想逐行閱讀文件,應該沒問題,因爲你每行只有一個json對象。你應該尋找如何逐行閱讀文件。我會給你一個提示:'BufferedReader'。 – Thomas

回答

0

座標應該有不同的定義(它不是一個整數,而是一個double和一個字符串數組的組合對象)。 如果您想要解析文件中定義的多個JSON對象,則必須逐行執行,因爲它不是JSON數組,而是每行包含JSON對象的一系列行。我會將該類重命名爲Tweet,並在Tweet列表中添加逐行解析的推文。 如果沒有座標,它不是問題,如果不存在,它們將被設置爲空。如果你最終不想輸出它們,你可以使用註釋@JsonInclude(JsonInclude.Include.NON_NULL)在類的頂部

+0

所以我想逐行解析json。所以每條推文都是一個POJO對象。那麼你怎麼做座標?並假設爲「ID」它是在「用戶」的對象有兩個鍵是「ID」和「名稱」,以便如何解決這個問題? – Kutam

+0

對於用戶,我將創建另一個Jackson obect用戶,其用戶的屬性是id和name(都是String)。相同的座標,將具有屬性座標(雙數組)和類型(字符串)。 – flavio