【问题标题】:How can I re-name duplicate keys in a large JSON file?如何重命名大型 JSON 文件中的重复键?
【发布时间】:2020-02-02 07:45:49
【问题描述】:

我有一个遵循这种格式的大文件。最初我尝试使用 JSONStream 在 javascript 中解析它并遇到一些issues。我一直在试图找出一种方法来更改重复键,以便我可以更轻松地解析它。例如:而不是content,每个都将附加一个计数器 - content-1content-2。这是一个非常大的文件,所以我无法手动执行,任何有关如何执行此操作或使用 js 重组的建议将不胜感激!

{
    "Test": {
        "id": 3454534344334554345434,
        "details": {
            "text": "78679786787"
        },
        "content": {
            "text": 567566767656776
        },
        "content": {
            "text": 567566767656776
        },
        "content": {
            "text": 567566767656776
        }
    }
}

【问题讨论】:

  • 您不接受“编写自己的解析器”(就像在其他帖子 cmets 中一样)所以我猜您是在要求工具或类似的东西(也就像您在其他帖子中所做的那样厘米)。这超出了 StackOverflow 的范围。看来这里唯一的答案是“写一个解析器”。
  • @JorgeFuentesGonzález 是的,我知道这是一个解决方案,但对于这个特定任务我无法做到这一点,所以我很好奇是否有人以前完成过上述操作。
  • @JorgeFuentesGonzález 在这里编写自定义解析器并不是必需的。他使用的解析器很好。我自己会写一个答案,但我真的不明白他从 JSONStream 获得的数据的问题是什么。数据对我来说似乎很好。
  • 哦,我明白了。为了方便起见,我能想到的是在双引号之间搜索字符串,然后是:,这样你就得到了所有的键。然后检查重复项并重命名它们。这实际上会在 JSON 周围找到重复项,但无论如何。
  • @BluLotus 哦,我想我现在明白了……您显示的数据是您输入的数据,而不是输出的数据?我从您最初的问题中认为,流解析器可以很好地处理您的重复键名。

标签: javascript parsing steam jsonstream


【解决方案1】:

我知道这是一个Javascript 问题,但我知道您需要在系统中加载文件,这是一个大文件。

对于这个问题,如果您能够使用 javascript 之外的另一种语言来解析文件,则可以使用 AWK。 AWK可以在linux、windows bash等下执行。

代码如下:

awk 'BEGIN{a=0}/"content"/{a++;gsub("content","content-"a,$0); print $0}!/"content"/{print $0}' file.json
    {
        "Test": {
            "id": 3454534344334554345434,
            "details": {
                "text": "78679786787"
            },
            "content-1": {
            "content-1": {
                "text": 567566767656776
            },
            "content-2": {
            "content-2": {
                "text": 567566767656776
            },
            "content-3": {
            "content-3": {
                "text": 567566767656776
            }
        }
    }

【讨论】:

  • 嘿,好点子。如果您仍然需要 JavaScript,您可以运行它然后解析输出。或者更好的是,使用这个纯 JavaScript AWK 库:github.com/agordon/webawk 如果这就是 AWK 的工作方式,我相信 JavaScript 实现也会这样做。编辑:哦,问题是您正在寻找“内容”。不会自动检测重复项。然后可以使用简单的正则表达式来实现相同的目标。
  • 好点。不知道这个库!对于那些格式化思维谜题来说似乎是一个不错的选择......
  • @JorgeFuentesGonzález 我已经尝试寻找可以在 text wrangler 中使用的正则表达式,但我没有找到任何与此相关的内容。
  • 您需要一个正则表达式来查找单词"content",获取匹配项并用增量替换它们。
  • 在 awk 中,使用命令 "a++;gsub("content","content-"a,$0)" 对具有模式的每一行(这是一个正则表达式)/content/math.utah.edu/docs/info/gawk_5.html 完成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 2021-04-29
  • 2020-05-28
  • 2012-01-30
  • 2018-08-16
  • 2020-04-20
相关资源
最近更新 更多