我知道有很多stackoverflow问题和答案可以帮助解决这个问题。我的问题不是关于修复而是正确写作。我需要人们观察并做出更好的决定。
这是JSON示例:
"SearchResult": {
"usersList": [
{
"name": "userId",
"value": "1009"
},
{
"name": "userName",
"value": "{userName}"
},
{
"name": "userUrl",
"value": "{userUrl}"
}
]
}
我们测试覆盖此JSON并将resultList
发送给应用程序。
对于覆盖,我们将值赋予HashMap
:
public Map<String, String> createUserList(String userName, String userUrl) {
Map<String, String> putsValue = new HashMap<String, String>();
//putsValue.put("{userName}", userName);
putsValue.put("\\{userName\\}", userName);
putsValue.put("\\{userUrl\\}", userUrl);
return putsValue;
}
问题是我何时使用
putsValue.put("{userName}", userName);
当我尝试使用以下代码解析JSON时:
String jsonTemplate = "fileName.json";
JSONTokener tokener = new JSONTokener(new FileReader(jsonTemplate));
JSONObject root = new JSONObject(tokener);
parsedJson = root.toString();
for (Map.Entry<String, String> putsValue: putsValue.entrySet()) {
parsedJson = parsedJson
.replaceAll(putsValue.getKey(), putsValue.getValue());
}
我收到此错误
java.util.regex.PatternSyntaxException: Illegal repetition
{userName}
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.closure(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
我如何找到这样的标签:
putsValue.put("{userName}", userName);
替换价值我不想这样做
putsValue.put("\\{userName\\}", userName);
答案 0 :(得分:1)
您可以尝试下一个Pattern.quote(String):
parsedJson = parsedJson
.replaceAll(Pattern.quote(putsValue.getKey()), putsValue.getValue());
答案 1 :(得分:0)
在您的情况下不需要自定义json映射器。 使用杰克逊。 您只需要提供getter / setter和注释字段。
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonInclude;
反序列化json:
ObjectMapper mapper = new ObjectMapper();
Clazz obj = mapper.readValue(jsonString, Clazz.class);
序列化为json:
class Clazz {
@JsonInclude(JsonInclude.Include.NON_NULL)
... field declaration;
}
String json = mapper.writeValueAsString(obj);
答案 2 :(得分:0)
您不需要正则表达式replaceAll
;只需使用replace
。
parsedJson = parsedJson.replace(putsValue.getKey(), putsValue.getValue());