You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSON Key/JWK转为Java HashMap<String,Object>提取private对象

实现方法

你拿到的字符串存在两个问题:一是首尾多了一层无意义的双引号,二是内容本身是无引号的类JS对象格式,不符合标准JSON规范,按以下步骤处理即可转换为HashMap<String, Object>并取出private对象:

步骤1:预处理原始字符串

首先剥掉首尾多余的双引号,再通过简单正则补全键、字符串值缺失的双引号,把内容修正为标准JSON格式,示例预处理逻辑:

// 从properties读取到的原始内容
String rawPropValue = "\"{ private: { a: adasdas, b: asdasdasd, c: asdasdas} }\"";
String standardJson = rawPropValue
        // 移除首尾包裹的多余双引号
        .replaceFirst("^\"", "")
        .replaceFirst("\"$", "")
        // 给所有对象key补双引号:匹配{或逗号后、冒号前的键名
        .replaceAll("([{,]\\s*)([a-zA-Z0-9_-]+)(\\s*:)", "$1\"$2\"$3")
        // 给所有字符串类型value补双引号:匹配冒号后、逗号或大括号前的值,兼容JWK的base64字符
        .replaceAll("(:\\s*)([a-zA-Z0-9_+/=-]+)(\\s*[},])", "$1\"$2\"$3");

处理完成后你会得到标准JSON结构:

{ "private": { "a": "adasdas", "b": "asdasdasd", "c": "asdasdas" } }

步骤2:解析为HashMap并提取private对象

直接用项目中已引入的JSON解析库把标准JSON转成嵌套HashMap即可,以下是两种常用库的实现示例:

  • 基于Jackson实现:
ObjectMapper objectMapper = new ObjectMapper();
HashMap<String, Object> resultMap = objectMapper.readValue(standardJson,
        new TypeReference<HashMap<String, Object>>() {});
// 提取private对象,本身也是键值对结构,强转为Map即可
HashMap<String, Object> privateJwk = (HashMap<String, Object>) resultMap.get("private");
  • 基于Fastjson实现:
HashMap<String, Object> resultMap = JSON.parseObject(standardJson,
        new TypeReference<HashMap<String, Object>>() {});
HashMap<String, Object> privateJwk = (HashMap<String, Object>) resultMap.get("private");

注意事项

  • 如果JWK内容中包含逗号、冒号、大括号这类特殊字符,正则补全引号的逻辑可能出现误匹配,最稳妥的方案是直接在参数存储中保存标准JSON格式的JWK,从源头规避格式不规范问题。
  • 上述正则的值匹配规则已经兼容JWK常用的base64编码字符(包含+///=/-),可以覆盖绝大多数常规JWK场景。

内容的提问来源于stack exchange,提问作者Kelvin Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:36:22