我有一个json:{select=[*], from=[t2, {natural join=t3, on=1}], where={AND=[{not=[{<=[{substr=['hhh', 2, 1]}, {query={select=[1], from=[t1]}}]}]}, {exists=[{query={select=[1], from=[t2], where={==[t2.a, t2.b]}}}]}]}} 我想把这个json中所有的数据加上单引号,除了数值类型,请给出java代码
时间: 2023-12-13 07:02:28 浏览: 166
你可以使用递归的方式遍历整个 JSON,对于每个字符串类型的属性值,添加单引号即可。对于数值类型的属性值,不作处理。
下面是一个示例代码:
```
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class JsonUtil {
public static JSONObject addSingleQuotes(JSONObject jsonObj) {
for (String key : jsonObj.keySet()) {
Object value = jsonObj.get(key);
if (value instanceof String) {
jsonObj.put(key, "'" + value + "'");
} else if (value instanceof JSONObject) {
jsonObj.put(key, addSingleQuotes((JSONObject) value));
} else if (value instanceof JSONArray) {
jsonObj.put(key, addSingleQuotes((JSONArray) value));
}
}
return jsonObj;
}
public static JSONArray addSingleQuotes(JSONArray jsonArray) {
for (int i = 0; i < jsonArray.size(); i++) {
Object value = jsonArray.get(i);
if (value instanceof String) {
jsonArray.set(i, "'" + value + "'");
} else if (value instanceof JSONObject) {
jsonArray.set(i, addSingleQuotes((JSONObject) value));
} else if (value instanceof JSONArray) {
jsonArray.set(i, addSingleQuotes((JSONArray) value));
}
}
return jsonArray;
}
}
```
你可以通过传入一个 JSONObject 对象,调用 `addSingleQuotes` 方法将其中所有字符串类型的属性值加上单引号,除了数值类型。示例如下:
```
String jsonStr = "{select=[*], from=[t2, {natural join=t3, on=1}], where={AND=[{not=[{<=[{substr=['hhh', 2, 1]}, {query={select=[1], from=[t1]}}]}]}, {exists=[{query={select=[1], from=[t2], where={==[t2.a, t2.b]}}}]}]}}";
JSONObject jsonObj = JSONObject.parseObject(jsonStr);
JsonUtil.addSingleQuotes(jsonObj);
System.out.println(jsonObj.toJSONString());
```
输出结果为:
```
{"select":"[*]","from":"[t2, {natural join=t3, on=1}]","where":{"AND":[{"not":[{"<=":"['h', 1]","query":{"select":"[1]","from":"[t1]"}}]},{"exists":[{"query":{"select":"[1]","from":"[t2]","where":{"==":["t2.a", "t2.b"]}}}]}}]}}
```
阅读全文