java中,通过FastJson对海量数据的Json⽂件,边读取边解析
当读取json⽂件的时候,如果json⽂件巨⼤,⽐如json⽂件中有900万条数据,⼤⼩有300多M,就不可以⼀次把数据都读到内存再解析。
第⼀内存受不了,第⼆CPU更受不了,所有的硬件和软件都受不了。
建议下载最新版本的fastjson
{
"array": [
1,
2,
3
],
"arraylist": [
{
"a": "b",
"c": "d",
"e": "f"
},
{
"a": "b",
"c": "d",
"e": "f"
},
{
"a": "b",
"c": "d",
"e": "f"
}
],
"object": {
"a": "b",
"c": "d",
"e": "f"
},
"string": "Hello World"
}
如果我们不⼀次性将其读到内存中进⾏解析,就要使⽤FastJson的JSONReader类,解析代码如下:
/**
* FastJson逐⾏解析json
* @author drlyee
* @date 2015-02-10
*/
public void ReadWithFastJson()
{
String jsonString = "{\"array\":[1,2,3],\"arraylist\":[{\"a\":\"b\",\"c\":\"d\",\"e\":\"f\"},{\"a\":\"b\",\"c\":\"d\",\"e\":\"f\"},{\"a\":\"b\",\"c\":\"d\",\"e\":\"f\"}],\"object\":{\"a\":\"b\"
// 如果json数据以形式保存在⽂件中,⽤FileReader进⾏流读取!!
// path为json数据⽂件路径!!
// JSONReader reader = new JSONReader(new FileReader(path));
// 为了直观,⽅便运⾏,就⽤StringReader做⽰例!
JSONReader reader = new JSONReader(new StringReader(jsonString));
reader.startObject();
System.out.print("start fastjson");
while (reader.hasNext())
{
String key = adString();
System.out.print("key " + key);
if (key.equals("array"))
if (key.equals("array"))
{
reader.startArray();
System.out.print("start " + key);
while (reader.hasNext())
{
String item = adString();
System.out.print(item);
}
System.out.print("end " + key);
}
else if (key.equals("arraylist"))
安卓在线解析json{
reader.startArray();
System.out.print("start " + key);
while (reader.hasNext())
{
reader.startObject();
System.out.print("start arraylist item");
while (reader.hasNext())
{
String arrayListItemKey = adString();
String arrayListItemValue = adObject().toString(); System.out.print("key " + arrayListItemKey);
System.out.print("value " + arrayListItemValue);
}
System.out.print("end arraylist item");
}
System.out.print("end " + key);
}
else if (key.equals("object"))
{
reader.startObject();
System.out.print("start object item");
while (reader.hasNext())
{
String objectKey = adString();
String objectValue = adObject().toString();
System.out.print("key " + objectKey);
System.out.print("value " + objectValue);
}
System.out.print("end object item");
}
else if (key.equals("string"))
{
System.out.print("start string");
String value = adObject().toString();
System.out.print("value " + value);
System.out.print("end string");
}
}
System.out.print("start fastjson");
}
通过JsonReader可以顺序读取。类似于剥橘⼦,⼀层⼀层解开json,不需要把json都读到内存中。其中⽐较重要的⼏个⽅法为:
startArray(); 开始解析数组
endArray(); 结束解析数组
startObject(); 开始解析键值对
endObject(); 结束解析键值对
只要掌握了以上⼏个关键的⽅法,FastJson⼤数据读取导⼊就不难。
还有⼀些其他的json⼤数据读取导⼊技术,后续介绍。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论