我正在使用java
创建以下json文件JSONObject json = new JSONObject();
JSONArray vertex = new JSONArray();
for (int i = 0; i < num; i++) {
JSONObject usr1 = new JSONObject();
JSONObject usr2 = new JSONObject();
// String na="name"+i
usr1.put("type", "string");
usr1.put("value", "name" + i);
usr2.put("name", usr1);
usr2.put("_id", Integer.toString(i));
usr2.put("_type", "vertex");
// v2.put(usr2);
vertex.put(usr2);
// email
JSONObject usr3 = new JSONObject();
JSONObject usr4 = new JSONObject();
usr3.put("type", "string");
usr3.put("value", "email" + i + "@gmail.com");
usr4.put("email", usr3);
usr4.put("_id", Integer.toString(i + num));
usr4.put("_type", "vertex");
vertex.put(usr4);
}
json.put("vertex", vertex);
num
可能约为60,000-200,000。
但是在这里我一次又一次地创建java对象,这非常昂贵。我希望最小化对象创建,并且不想过多地更改代码结构。如何在不改变代码结构的情况下实现这一目标呢?
我使用org.codehaus.jettison.json
包中的JSON *类。我必须将它写入json对象的文件
答案 0 :(得分:2)
为了在不创建中间对象的情况下快速生成JSON,可以使用JSONWriter
:
StringWriter sw = new StringWriter();
JSONWriter writer = new JSONWriter(sw);
writer.object().key("vertex").array();
for (int i = 0; i < num; i++) {
writer
.object() // usr2
.key("name")
.object() // usr1
.key("type").value("string")
.key("value").value("name"+i)
.endObject()
.key("_id").value(Integer.toString(i))
.key("_type").value("vertex")
.endObject()
.object() // usr4
.key("email")
.object() // usr3
.key("type").value("string")
.key("value").value("email"+i+"@gmail.com")
.endObject()
.key("_id").value(Integer.toString(i+num))
.key("_type").value("vertex")
.endObject();
}
writer.endArray().endObject();
String json = sw.toString();
此处StringWriter
用于存储中间JSON文本。或者,您可以直接写入文件或网络套接字,而不必将其保留在内存中。
答案 1 :(得分:1)
你的json似乎就像
{
"vertex": [
{
"name": {
"type": "string",
"value": "name0"
},
"_id": 0,
"_type": "vertex"
},
{
"email": {
"type": "string",
"value": "email0@gmail.com"
},
"_id": 0,
"_type": "vertex"
},
.....
]
}
在每个连续循环... 2 jsonobject已设置在vertext json数组上... 你可以通过在每个连续的循环中创建1个jsonobject来减小一半的大小
类似这样的事情
{
"vertex": [
{
"_id": 0,
"_type": "vertex",
"name": "name0",
"email": "email0@gmail.com"
},
....
]
}
你不会在json创作上做太多...
虽然我也不会觉得包含“_id”和“_type”键的意思...因为“_id”包含从0到num的索引,你可以使用顶点数组得到该索引...
因此你可以使用json的结构作为
{
"vertex": [
{
"name": "name0",
"email": "email0@gmail.com"
},
....
]
}
你的java代码可能会减少到这个......
JSONObject json = new JSONObject();
JSONArray vertex = new JSONArray();
for (int i = 0; i < num; i++) {
vertex.put(new JSONObject().put("name", "name" + i).put("email", "email" + i + "@gmail.com"));
}
json.put("vertex", vertex);