Java 将JSON字符串透明地添加到映射/列表

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

我从一个外部源(数据库)获取JSON字符串,需要将这些字符串收集到一个映射结果中(key是记录键,value实际上是一个包含JSON格式数据的字符串)。例如,我将从DB获得3条记录,如下所示:

 "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\“}”]因此,结果的客户端需要首先将每个元素解压为字符串,然后再解压数据。理想的结果是什么?