JSON使用HashMap JAVA覆盖

时间:2016-08-04 13:41:05

标签: java json hashmap

我知道有很多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);

3 个答案:

答案 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());