首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Json字符串键中删除双引号

从Json字符串键中删除双引号
EN

Stack Overflow用户
提问于 2020-10-04 20:47:02
回答 2查看 492关注 0票数 0

java中的字符串如下{"a":"hello","b":"r","s","j":10}

我希望输出为:{a:"hello",b:"r","s",j:10}

从json字符串的key中删除引号

使用java语言解决方案

EN

回答 2

Stack Overflow用户

发布于 2020-10-05 11:19:24

我不确定您为什么要这样做,但是如果您使用Jackson作为JSON库,这里有一个简单的方法。

代码段

代码语言:javascript
复制
String jsonStr = "{\"a\":\"hello\",\"b\":[\"r\",\"s\"],\"j\":10}";
     
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
System.out.println(mapper.writeValueAsString(mapper.readValue(jsonStr, Map.class)));

注意:自从2.10之后,JsonGenerator.Feature.QUOTE_FIELD_NAMES就被弃用了。

控制台输出

代码语言:javascript
复制
{a:"hello",b:["r","s"],j:10}
票数 0
EN

Stack Overflow用户

发布于 2020-10-04 21:33:47

我真的不明白你为什么要这么做,因为发布这样的操作后,你的JSON将不符合JSON的资格。假设它是一个字符串,我找到了一种棘手的方法。递归地迭代JSON,并在键之前和之后附加一个标记。使用replaceAll删除包含“的所有token实例。

例如,如果您的JSON是这样的:

代码语言:javascript
复制
{
 "key1": {
   "key2": ["aaaa", "bbbb"]
 }
}

您可以将其转换为以下形式:

代码语言:javascript
复制
{
 "$$$$_key1_$$$$": {
   "$$$$_key2_$$$$": ["aaaa", "bbbb"]
 }
}

然后,在字符串化后,可以用空字符替换\"$$$$__$$$$\"的所有实例。

代码:

代码语言:javascript
复制
    public static void main(String[] args) throws IOException {
        String json = new String(Files.readAllBytes(Paths.get("sample_json.json")));
        JSONObject jsonObject = new JSONObject(json);
        String str = change(jsonObject).toString();

        System.out.println(str.replaceAll("\"\\$\\$\\$\\$_", "")
                .replaceAll("_\\$\\$\\$\\$\"", "")
        );

    }


    public static JSONObject change(JSONObject jsonObject){
        JSONObject result = new JSONObject();
        Map<String, Object> map = jsonObject.toMap();
        for(Map.Entry<String, Object> entry : map.entrySet()){
            Object object = entry.getValue();
            if (object instanceof JSONObject){
                result.put(appendToken(entry.getKey()), change((JSONObject) object));
            } else if (object instanceof JSONArray){
                JSONArray objArray = (JSONArray) object;
                JSONArray resultArray = new JSONArray();
                for (Object arrObj : objArray){
                    if (arrObj instanceof JSONObject){
                        resultArray.put(change((JSONObject) arrObj));
                    } else {
                        resultArray.put(arrObj);
                    }
                }
                result.put(appendToken(entry.getKey()), resultArray);
            } else {
                result.put(appendToken(entry.getKey()), object);
            }
        }
        return result;
    }

    private static String appendToken(String key){
        return "$$$$_" + key + "_$$$$";
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64194784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档