Java 将JSON字符串透明地添加到映射/列表
我从一个外部源(数据库)获取JSON字符串,需要将这些字符串收集到一个映射结果中(key是记录键,value实际上是一个包含JSON格式数据的字符串)。例如,我将从DB获得3条记录,如下所示:Java 将JSON字符串透明地添加到映射/列表,java,json,string,serialization,Java,Json,String,Serialization,我从一个外部源(数据库)获取JSON字符串,需要将这些字符串收集到一个映射结果中(key是记录键,value实际上是一个包含JSON格式数据的字符串)。例如,我将从DB获得3条记录,如下所示: "record1", "{ "type":"recType1", "data": "somedata" }" "record2", "{ "type":"recType1", "data": "someotherdata" }" "recrod3", "{ "type":"recType1", "d
"record1", "{ "type":"recType1", "data": "somedata" }"
"record2", "{ "type":"recType1", "data": "someotherdata" }"
"recrod3", "{ "type":"recType1", "data": "yetanotherdata" }"
我不想解析回复中JSON的数据(不需要)。
如果我将它们添加为“String”,那么我将得到“转义(\”),这当然是个问题。
例如,上面的record1值如下所示:
"{ \"type\":\"recType1\", \"data\": \"somedata\" }"
我如何创建一个将它们结合在一起的Json?有没有一种方法可以“透明地”添加某个内容,而不需要内部序列化程序来处理它,该序列化程序会逃逸值的内容?我能想到的最简单的方法是eval()函数,下面是一个使用json对象的示例:
eval("result= { \"type\":\"recType1\", \"data\": \"somedata\" }")
document.write(result["type"]);
这将把您的对象解析为javascript代码,您可以检索您的值。
干杯。您可以为从JSON获得的对象创建Java类, 使用GSON 2.0 API将其解析为java对象ArrayList 提取它并创建地图
注意:GSON 2.0已根据您的类处理了所有要正确解析的数据类型。以下是显示问题的示例代码:
public Set<String> doQuery(String query)
{
Set<String> result = new LinkedHashSet<>();
boolean haveMore = true;
while(haveMore)
{
String entry = DB.read(query);
if (entry != null)
result.add(entry);
else
haveMore = false;
}
return result;
}
public Map<String, Object> generateReport(String query)
{
Map<String, Object> report = new LinkedHashMap<>();
Set<String> result = doQuery(query);
if (result != null)
{
if (result.size() != 0)
{
report.put("result", "success");
report.put("query", query);
report.put("count", result.size());
report.put("objects", result);
}
else
return null;
}
return report;
}
public String getReportAsJson(String query)
{
Map<String, Object> report = generateReport(query);
if (report != null)
{
Gson g = new Gson();
return g.toJson(report);
}
return "{ \"result\": \"fail\" }";
}
publicsetdoquery(字符串查询)
{
设置结果=新建LinkedHashSet();
布尔haveMore=true;
while(haveMore)
{
String entry=DB.read(查询);
if(条目!=null)
结果。添加(条目);
其他的
haveMore=假;
}
返回结果;
}
公共地图生成器报告(字符串查询)
{
映射报告=新建LinkedHashMap();
设置结果=doQuery(查询);
如果(结果!=null)
{
如果(result.size()!=0)
{
报告。出售(“结果”、“成功”);
报告。放置(“查询”,查询);
report.put(“count”,result.size());
报告。放置(“对象”,结果);
}
其他的
返回null;
}
返回报告;
}
公共字符串getReportAsJson(字符串查询)
{
地图报表=生成报表(查询);
如果(报告!=null)
{
Gson g=新的Gson();
返回g.toJson(报告);
}
返回“{\”结果\“:\”失败\“}”;
}
如果获取结果,则从DB检索到的每个Json文档都将从映射中序列化为字符串,并且结果为all“在Json中是转义的。您的第一个摘录不是有效的Json。什么是真正的JSON?当您键入gson时,您可能是指JSON吗?您有任何表示尝试的代码吗?不需要解析我从数据库获得的JSON,主要是为了性能。编码示例条目的期望结果是(2项而不是3项)[{“type”:“recType1”,“data”:“somedata”},{“type”:“recordType1”,“data”:“someotherdata”}],但当我通过集合进行编码时,我将得到一个类似以下内容的JSON:[“{”type\:\“recordType1\”,““data\”:“somedata\”,“{”type\:“recordType1\”,而不是“\”data\:\”someotherdata\“}”]因此,结果的客户端需要首先将每个元素解压为字符串,然后再解压数据。理想的结果是什么?