首页 > 解决方案 > 使用 gson 获取原始格式的 Java json(仅用引号括起来的字符串)

问题描述

想象一下我有以下 JsonObject {"name":"Test Name","id":13,"isimportant":true}

我想把它添加到mysql,所以我会遍历成员

void test(JsonObject jsonobject) {
        String names="";
        String values="";
        Set<Entry<String, JsonElement>> entrySet = jsonobject.entrySet();
        for(Map.Entry<String,JsonElement> entry : entrySet) {
            String key=entry.getKey();
            names+="`"+key+"`,";
            values+="\""+jsonobject.get(key).getAsString()+"\",";
        }
        ... create an insert query from the `names` and `values` strings
        ... and add to database
}

为了确保正确处理字符串,我用引号将所有值括起来,因此这将导致类似的查询

INSERT INTO TestTable (name,id,isimportant) VALUES ("Test Name","13","true")

我宁愿只在实际的字符串变量上加上引号,即

INSERT INTO TestTable (name,id,isimportant) VALUES ("Test Name",13,true)

使用与原始 json 相同的格式。

如何做到这一点?我一般使用 gson 库,即 JsonObjects 而不是 JSONObjects。

标签: javajsongson

解决方案


认为我找到了使用 getAsJsonPrimitive 的解决方案

            if (entry.getValue().getAsJsonPrimitive().isString())
                values+="\""+jsonobject.get(key).getAsString()+"\",";
            else
                values+=jsonobject.get(key).getAsString()+",";

由于 JsonPrimitive 仍然包含适用的引号,因此可以这样做

            values+=entry.getValue().getAsJsonPrimitive().toString()+",";

这正是我所需要的。


推荐阅读