我想解析Java中的JSON字符串並找到鍵值對,以便我可以確定JSON對象的近似結構,因爲JSON字符串的對象結構未知。在Java中解析JSON而不知道JSON格式
例如,一個執行可能有一個JSON字符串是這樣的:
{"id" : 12345, "days" : [ "Monday", "Wednesday" ], "person" : { "firstName" : "David", "lastName" : "Menoyo" } }
而另一個是這樣的:
{"url" : "http://someurl.com", "method" : "POST", "isauth" : false }
我將如何通過不同的JSON元素週期,並確定鍵和他們的價值?我看着jackson-core
的JsonParser
。我看到如何獲取下一個「標記」並確定它是什麼類型的標記(即字段名稱,值,數組開始等),但是,我不知道如何獲取實際標記的值。
例如:
public void parse(String json) {
try {
JsonFactory f = new JsonFactory();
JsonParser parser = f.createParser(json);
JsonToken token = parser.nextToken();
while (token != null) {
if (token.equals(JsonToken.START_ARRAY)) {
logger.debug("Start Array : " + token.toString());
} else if (token.equals(JsonToken.END_ARRAY)) {
logger.debug("End Array : " + token.toString());
} else if (token.equals(JsonToken.START_OBJECT)) {
logger.debug("Start Object : " + token.toString());
} else if (token.equals(JsonToken.END_OBJECT)) {
logger.debug("End Object : " + token.toString());
} else if (token.equals(JsonToken.FIELD_NAME)) {
logger.debug("Field Name : " + token.toString());
} else if (token.equals(JsonToken.VALUE_FALSE)) {
logger.debug("Value False : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NULL)) {
logger.debug("Value Null : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NUMBER_FLOAT)) {
logger.debug("Value Number Float : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NUMBER_INT)) {
logger.debug("Value Number Int : " + token.toString());
} else if (token.equals(JsonToken.VALUE_STRING)) {
logger.debug("Value String : " + token.toString());
} else if (token.equals(JsonToken.VALUE_TRUE)) {
logger.debug("Value True : " + token.toString());
} else {
logger.debug("Something else : " + token.toString());
}
token = parser.nextToken();
}
} catch (Exception e) {
logger.error("", e);
}
}
是否有jackson
類或穿過JSON元件產生一個樹,或允許一個週期和在獲得實際的鍵名的一些其他的庫(gson
或simple-json
)除了值?
那麼,簡單的部分就是解析爲地圖和列表 - 這是每個合理的JSON解析器都可以做得很好的東西。當然,更難的部分是弄清楚數據的含義,如果每次都完全不同。 –
(如果您還沒有這樣做,請訪問json.org並瞭解基本的JSON語法。所有值都是數字,布爾值,字符串,對象(映射),數組或空值 - 沒有更復雜的了。 –
感謝您的建議和鏈接。我對JSON非常熟悉;只是不解析沒有註釋和/或立即過渡到現有的pojo結構。 – whyceewhite