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

如何匹配带动态后缀的JSON Key以获取mediaFit字段值?

解决动态JSON Key(以media_id_开头)的mediaFit字段获取问题

你当前代码的核心错误是:遍历到符合条件的media_id_xxx类型Key后,没有使用匹配到的动态Key名称去获取对应的子JSON对象,而是错误地用了固定字符串"media_id",导致无法定位目标字段。

修正后的完整代码

JSONObject jsonObject = new JSONObject(templatePreviewElements.getPreviewSrcUrl().getAttribute("text"));
System.out.println(jsonObject);

JSONArray jsonArray = jsonObject.getJSONArray("pages");

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject pageObject = jsonArray.getJSONObject(i); // 提前获取当前页对象,避免重复调用
    for (Object key : pageObject.keySet()) {
        String keyStr = (String) key;
        // 精准匹配以media_id_开头的Key
        if (keyStr.startsWith("media_id_")) {
            // 使用匹配到的动态Key获取子对象
            JSONObject mediaObject = pageObject.getJSONObject(keyStr);
            String actualEffect = mediaObject.getString("mediaFit");
            
            System.out.println("Actual Selected Text Effect: " + actualEffect);
            System.out.println("Expected Selected Text Effect: " + mediaEffect);
            assertEquals(actualEffect, mediaEffect);
            System.out.println("匹配到符合条件的Key: " + keyStr);
        }
    }
}

关键优化说明

  • 精准匹配Key:用keyStr.startsWith("media_id_")替代contains,避免误匹配到包含media_id但不符合开头规则的Key;如果需要严格限制后缀为数字,可改用正则匹配:
    if (keyStr.matches("^media_id_\\d+$")) {
        // 逻辑代码
    }
    
  • 减少重复调用:提前将当前页的JSONObject赋值给pageObject,避免循环中重复执行jsonObject.getJSONArray("pages").getJSONObject(i),提升代码效率和可读性
  • 使用动态Key:核心修正点——直接用匹配到的keyStr作为参数调用getJSONObject,而非固定字符串"media_id"

示例JSON

"media_id_1696320854359": {
  "resourceId": "HzXvCFvKQWrf9hpfMi2u3smsvziXpz2Vazvr",
  "groupId": "9ff31635-b440-41b2-b147-792aed6e5529",
  "orignalId": "HzXvCFvKQWrf9hpfMi2u3smsvziXpz2Vazvr",
  "orignalWidth": 1584,
  "orignalHeight": 1920,
  "horizontal": {
    "height": 1080,
    "width": 891,
    "top": 0,
    "left": 514.5
  },
  "vertical": {},
  "custom": {},
  "type": "img",
  "kenBurns": "forced",
  "mediaFit": "fill",
  "mediaAlign": "center",
  "tags": [],
  "name": "helmet.jpg",
  "height": 1920,
  "width": 1584,
  "modifiedAt": "2023-09-28T14:52:31.214Z",
  "userId": "9ff31635-b440-41b2-b147-792aed6e5529"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:17:02