替换JSON键中的空格

我正在考虑用下划线替换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的更多信息

以上是 替换JSON键中的空格 的全部内容, 来源链接: utcz.com/qa/409145.html

回到顶部