【问题标题】:Removing double quotes from Json String Key从 Json 字符串键中删除双引号
【发布时间】:2020-10-04 12:47:02
【问题描述】:

java中的字符串如下 {"a":"你好","b":["r","s"],"j":10}

我希望输出为: {a:"你好",b:["r","s"],j:10}

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

使用java语言解决

【问题讨论】:

标签: java json string java-8


【解决方案1】:

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

代码 sn-p

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)));

注意:JsonGenerator.Feature.QUOTE_FIELD_NAMES2.10 以来已弃用。

控制台输出

{a:"hello",b:["r","s"],j:10}

【讨论】:

  • @Vedant Mehra 如果我的解决方案适合您,请告诉我,谢谢!
【解决方案2】:

我真的不明白您为什么要这样做,因为发布这样的操作后您的 JSON 将不符合 JSON 的条件。假设它是一个字符串,我找到了一个棘手的方法来做到这一点。递归地遍历 JSON 并在键之前和之后附加一个令牌。使用 replaceAll 删除所有带有 ".

的标记实例

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

{
 "key1": {
   "key2": ["aaaa", "bbbb"]
 }
}

你可以把它转换成这种形式:

{
 "$$$$_key1_$$$$": {
   "$$$$_key2_$$$$": ["aaaa", "bbbb"]
 }
}

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

代码:



    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 + "_$$$$";
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多