2013-11-23 63 views
1

我有一个500,000行json文件我正在尝试阅读,我尝试了一些在线示例,如mkyong和其他许多人,但这种格式对我来说是第一次遇到。任何人都可以帮助我开始?使用Java读取JSON数据

我正在使用json-simple库。

对这个主题有什么启发?我会很感激

{ 
"info": { 
    "category": "url", 
    "started": "2013-11-07 03:44:32", 
    "ended": "2013-11-07 03:46:55", 
    "version": "0.6", 
    "duration": 143, 
    "id": 37 
}, 
"signatures": [], 
"static": {}, 
"dropped": [ 
    { 
     "yara": [], 
     "sha1": "6fd9eb6a42fd531988fba24137a2fe29ad992465", 
     "name": "tia[1].png", 
     "type": "PNG image data, 27 x 23, 8-bit/color RGB, non-interlaced", 
     "sha256": "75d6d26afb9506145d7f6472555855ef4305e0ef3e7cf4cb3d943c58123c7f74", 
     "crc32": "FDCAC92F", 
     "path": "/home/user/cuckoo/storage/analyses/37/files/2435944344/tia[1].png", 
     "ssdeep": null, 
     "size": 387, 
     "sha512": "b47ca17050ff4b6ddab848195c17b875454aafbec06d07bba126e553c9d32647f461adee9d1a75bbfffa08d6a8fc955429562794b123bebc9ec23dc89bdefcc5", 
     "md5": "ad07ee4cb98da073dda56ce7ceb88f5a" 
    } 
] 
} 

答复

目前,我不明白我怎么可以得到[下降],我做了一些简单的例子的阵列,但是这是第一个为我。它似乎有一个层次结构,但我不知道如何访问它

+3

您是否需要帮助理解JSON格式本身,或者如何使用json-simple解析它? – rangu

回答

2

为什么不从json-simple decoding examples开始?如果它是你担心的文件大小,那么你应该使用'SAX'风格的例子。该代码将是一个很好的例子,说明如何不做。查看其他评论以获得更好的想法。

JSONObject data= (JSONObject)JSONValue.parse(new InputStreamReader(JsonSimpleEx.class.getResourceAsStream("/test.json"))); 
JSONArray dropped = (JSONArray)data.get("dropped"); 
JSONObject first = (JSONObject)dropped.get(0); 
System.out.println(first.get("crc32")); 
+0

哦,天哪......当我看到这个时,我就明白了,我的代码和你的代码很相似。我发现在处理这么大的json文件时,这有时会变得非常混乱。那么编码的好方法是什么?使用SAX创建特定于我想要收集的字段的类文件?感谢所有这些启发。 – Amos

+0

编写代码的更好方法是使用与您的json数据结构相匹配的元素来创建普通的旧Java对象(PO​​JO's)。一个好的json库将简单地创建这些对象的新实例并将它们返回给您,以便您可以使用Java对象获取数据。由于我在json简单的例子中没有看到类似的东西,所以我会假设它不支持这个。大多数json库支持这个功能。例如,在Gson库中,它被称为“反序列化”。 – NicholasKarl

1

您可以使用Gson - from Google。它简单而简洁。

您需要声明的Java POJO代表您的JSON数据,如:

public class Info { 
    private Category category; 
    ... 
} 

希望这有助于。祝你好运。

+0

谢谢:)目前看着Gson,我正在使用这个json-simple lib,我怀疑它缺少一些我需要的功能。 – Amos