java—将json字符串透明地添加到Map/列表

f0brbegy  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(281)

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

"record1", "{ "type":"recType1", "data": "somedata" }"
 "record2", "{ "type":"recType1", "data": "someotherdata" }"
 "recrod3", "{ "type":"recType1", "data": "yetanotherdata" }"

我不想解析回复中json的数据(不需要)。如果我把它们作为“string”添加,那么我会得到“escaped(\”),这当然是个问题。例如,上面的record1值如下所示:

"{ \"type\":\"recType1\", \"data\": \"somedata\" }"

如何创建一个将它们结合在一起的json?有没有一种方法可以“透明地”添加某个内容,而不需要内部序列化程序对其进行处理,该序列化程序会转义该值的内容?

wmomyfyw

wmomyfyw1#

下面是显示问题的示例代码:

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\" }";
    }

如果获取结果,则从db检索到的每个json文档都将从Map中序列化为字符串,结果是json中的“all”被转义。

7ivaypg9

7ivaypg92#

您可以为从json获取的对象创建java类,使用gson 2.0 api将其解析为java对象arraylist。
提取并创建Map。
注意:gson2.0已经根据您的类处理了所有要正确解析的数据类型。

gmol1639

gmol16393#

我能想到的最简单的方法是eval()函数,这里是一个使用json对象的示例:

eval("result= { \"type\":\"recType1\", \"data\": \"somedata\" }")
document.write(result["type"]);

这将把您的对象解析为javascript代码,您可以检索您的值。干杯。

相关问题