当前位置: 首页 > 面试题库 >

替换JSON键中的空格

吴升
2023-03-14
问题内容

我正在考虑用下划线替换JSON键中所有空格的最佳解决方案。

{ 
  "Format": "JSON", 
  "TestData": { 
    "Key with Spaces in it": { 
      "And Again": { 
        "Child_Key1": "Financial", 
        "Child_Key2": null 
      }, 
......... 
.....

我希望上述转换如下所示:

{ 
  "Format": "JSON", 
  "TestData": { 
    "Key_with_Spaces_in_it": { 
      "And_Again": { 
        "Child_Key1": "Financial", 
        "Child_Key2": null 
      }, 
......... 
.....

有什么建议 ?

是否有任何Java库具有任何预定义功能来执行此操作?


问题答案:

更换钥匙

以下代码使用Google的JSON解析器提取密钥,将其重新格式化,然后创建一个新的JSON对象:

public static void main(String[] args) {
    String testJSON = "{\"TestKey\": \"TEST\", \"Test spaces\": { \"child spaces 1\": \"child value 1\", \"child spaces 2\": \"child value 2\" } }";
    Map oldJSONObject = new Gson().fromJson(testJSON, Map.class);
    JsonObject newJSONObject = iterateJSON(oldJSONObject);

    Gson someGson = new Gson();
    String outputJson = someGson.toJson(newJSONObject);
    System.out.println(outputJson);
}

private static JsonObject iterateJSON(Map JSONData) {
    JsonObject newJSONObject = new JsonObject();
    Set jsonKeys = JSONData.keySet();
    Iterator<?> keys = jsonKeys.iterator();
    while(keys.hasNext()) {
        String currentKey = (String) keys.next();
        String newKey = currentKey.replaceAll(" ", "_");
        if (JSONData.get(currentKey) instanceof Map) {
            JsonObject currentValue = iterateJSON((Map) JSONData.get(currentKey));
            newJSONObject.add(currentKey, currentValue);
        } else {
            String currentValue = (String) JSONData.get(currentKey);
            newJSONObject.addProperty(newKey, currentValue);
        }
    }
    return newJSONObject;
}

您可以在此处阅读有关GSON的更多信息。

替换值

根据JSON数据的设置方式,您可能需要使用JSONObject切换JSONArray。

JSONArrays以开头和结尾[],而JSONObjects以开头和结尾{}

简而言之,这些方法将遍历整个数组/对象,并用下划线替换任何空格。它们是递归的,因此它们将深入子JSONArrays / JSONObjects。

如果JSON数据编码为Java JSONArray,则可以执行以下操作:

public static void removeJSONSpaces(JSONArray theJSON) {
    for (int i = 0; while i < theJSON.length(); i++) {
        if (theJSON.get(i) instanceof JSONArray) {
            currentJSONArray = theJSON.getJSONArray(i);
            removeJSONSpaces(currentJSONArray);
        } else {
            currentEntry = theJSON.getString(i);
            fixedEntry = currentEntry.replace(" ", "_");
            currentJSONArray.put(i, fixedEntry);
        }
    }
}

简而言之,此方法将遍历整个数组,并用下划线替换任何空格。它是递归的,因此将深入子JSONArrays中。

您可以在此处阅读有关JSONArrays的更多信息

如果数据编码为JSONObject,则需要执行以下操作:

public static void removeJSONSpaces(JSONObject theJSON) {

    jObject = new JSONObject(theJSON.trim());
    Iterator<?> keys = jObject.keys();

    while(keys.hasNext()) {
        String key = (String)keys.next();
        if (jObject.get(key) instanceof JSONObject) {
            removeJSONSpaces(jObject.get(key))
        } else {
            currentEntry = theJSON.getString(i);
            fixedEntry = currentEntry.replace(" ", "_");
            currentJSONArray.put(i, fixedEntry);
        }
    }

}

您可以在此处阅读有关JSONObjects的更多信息



 类似资料:
  • 本文向大家介绍Java 替换空格,包括了Java 替换空格的使用技巧和注意事项,需要的朋友参考一下 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 以下是java.lang.StringBuilder.replace()方法的声明 public StringBuilder replace(i

  • 题目链接 牛客网 题目描述 将一个字符串中的空格替换成 "%20"。 // text Input: "A B" Output: "A%20B" 解题思路 ① 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符。 ② 令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。P1 和

  • 问题内容: 我的apicontroller返回了以下JSON对象: 我要替换为 我已经尝试了下面的代码,但它仅代替的第一次出现。如何替换所有条目? 谢谢, 问题答案: 您需要使替换全局: 这样,它将继续替换null直到到达结尾 正则表达式文档: https://developer.mozilla.org/zh- CN/docs/Web/JavaScript/Reference/Global_Obj

  • 本文向大家介绍用SAP ABAP中的空格替换Tab,包括了用SAP ABAP中的空格替换Tab的使用技巧和注意事项,需要的朋友参考一下 您只需要进行一些小的更改。您需要添加“ If条件”来处理选项卡,如下所示- 我认为它应该解决您的问题,并且看起来既不是硬编码也不是错误的实现。

  • 我想Stringify我的json,但我想排除空嵌套数组的对象。 我的json看起来像这样: 我想忽略“博士”,因为它是空的。 如何在typescript/Javascript中实现它? 这里是我尝试过的代码: 谢谢

  • 功能文件-1 场景大纲:Lambda API注册 给定url ApiAdminURL 功能文件-2 给定url internalGateway 和路径 这不是将#(LocalVersion)替换为v1