0

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

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

我不想解析回复中 jsons 的数据(不需要)。如果我将它们添加为“字符串”,那么我将得到“转义(\”),这当然是一个问题。例如,上面的 record1 值将如下所示:

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

如何创建将它们全部组合在一起的结果 Json?有没有一种方法可以“透明地”添加一些东西,而不会被内部序列化程序处理,从而转义值的内容?

4

3 回答 3

0

您可以为从 JSON 获取的对象创建 Java 类,使用 GSON 2.0 API 将其解析为 java 对象 ArrayList。

提取它并创建 MAP。

注意:GSON 2.0 已经根据您的类处理了所有数据类型的正确解析。

于 2013-06-06T14:51:01.797 回答
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\" }";
    }  

如果您将结果从 DB 中检索到的每个 Json 文档都序列化为 Map 中的 String,结果是 Json 中的所有 " 都被转义。

于 2013-06-06T17:39:24.860 回答
0

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

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

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

于 2013-06-06T14:34:15.717 回答