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

JSON记录设计问题求助:解析记录集合遇长期困扰

解析这类JSON记录的痛点及解决方案

我完全理解你这种被不合理JSON设计卡很久的烦躁——把资源路径和版本信息硬塞在单个字符串的data字段里,确实会给解析带来一堆不必要的麻烦,尤其是还遇到像第二条记录那样截断的情况,简直雪上加霜。

先说说现有设计的核心问题

  • 耦合性太强:资源路径和版本信息绑定在一个字符串里,要单独提取其中一项必须手动做字符串拆分,很容易因为格式不统一(比如截断、分隔符变化)出错。
  • 缺少校验性:像第二条记录的版本字段明显不完整,机器无法自动识别这种错误,只能靠人工排查。
  • 扩展性差:如果后续要新增其他参数(比如资源类型、作者),只能继续往这个字符串里加,只会让解析逻辑越来越复杂。

最优解:重构JSON结构(推荐)

如果有机会修改原始数据的生成逻辑,把data拆分成结构化的字段是一劳永逸的办法。比如改成这样:

[
  {
    "resourcePath": "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/article/test",
    "version": "1521246543034"
  },
  {
    "resourcePath": "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/book/test2",
    "version": null,
    "invalidReason": "版本字段截断"
  }
]

这样解析时直接提取对应字段就行,完全不用处理字符串拆分的问题,后续新增字段也方便。

临时方案:针对现有结构的解析代码

如果暂时没法修改原始结构,可以用字符串处理逻辑来兼容,下面是JavaScript的示例(其他语言思路类似):

const rawJson = [
  { "data": "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/article/test;version=1521246543034" },
  { "data": "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/book/test2;versio" }
];

const parsedResults = rawJson.map(item => {
  let resourcePath = item.data;
  let version = null;
  let isVersionInvalid = false;

  // 先处理正常的版本分隔符
  const versionSplit = item.data.split(";version=");
  if (versionSplit.length === 2) {
    resourcePath = versionSplit[0];
    // 校验版本是否为有效数字(根据你的实际需求调整规则)
    if (/^\d+$/.test(versionSplit[1])) {
      version = versionSplit[1];
    } else {
      isVersionInvalid = true;
    }
  } 
  // 处理截断的版本字段(比如第二条记录的";versio")
  else if (item.data.includes(";versio")) {
    resourcePath = item.data.split(";versio")[0];
    isVersionInvalid = true;
  }

  return { resourcePath, version, isVersionInvalid };
});

console.log(parsedResults);

这个代码会帮你拆分出资源路径和版本,同时标记版本无效的记录,避免解析出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:28:14