【问题标题】:How to trim all spaces except those within quotes for large JSON file如何修剪除大 JSON 文件引号内的所有空格
【发布时间】:2014-10-05 22:25:51
【问题描述】:

我目前正在处理一个大型 JSON 文件,并希望通过删除不在引号内的所有多余空格、制表符、回车等来缩短它。该文件大约有 100,000 行代码,我的其他脚本很难快速使用它。该文件最初看起来像:

{
  "path": "/math/", 
  "id": "math", 
  "title": "Math Title",       
  "icon_url": "/images/power-mode/badges/circles-40x40.png",   
  "contains": [
    "Topic", 
    "Video", 
   "Exercise"
  ], 
  "children": [], 
  "parent_id": "root",
  "ancestor_ids": [
    "root"
  ], 
  "description": "null", 
  "kind": "Topic", 
  "h_position": -10,
  "v_position": 6, 
  "slug": "math"
}

我希望它在删除不必要的空格、制表符、回车等后看起来像这样:

{"path":"/math/","id":"math","title":"Math Title","icon_url":"/images/power-mode/badges/circles-40x40.png",     
"contains":["Topic","Video","Exercise"],"children":[],"parent_id":"root","ancestor_ids":["root"],   
"description": "null","kind":"Topic","h_position":-10,"v_position":6,"slug":"math"}

除引号内的空格外,基本上所有空格都应删除。

【问题讨论】:

    标签: javascript json linux space


    【解决方案1】:

    您可以使用JSON minifier online。 在 Google 上搜索 JSON 压缩器。 Google

    这是 JSON 压缩器返回给我的内容:

    {"path":"/math/","id":"math","title":"Math Title","icon_url":"/images/power-mode/badges/circles-40x40.png","contains":["Topic","Video","Exercise"],"children":[],"parent_id":"root","ancestor_ids":["root"],"description":"null","kind":"Topic","h_position":-10,"v_position":6,"slug":"math"}
    

    您可以看到它不会删除引号之间的空格。例如“数学题”

    【讨论】:

    • 不行,因为这样会删除引号内的空格
    • @ibanez221 不,它没有。
    • 我的文件可能太大了,因为您提供的缩小器(以及我尝试过的其他几个)不返回代码
    【解决方案2】:

    为什么不直接通过 perl 进行管道传输???

    perl -0pe 's#((^[^"]+")|("[^"]+$)|("[^"]+")|(^[^"]+$))#($x=$1)=~s/\s+/ /g;$x#ge'
    
    • -0 会将字段分隔符设置为 null,因此 while() 将看到一个大行,您可以处理多行,仅包含空格,而不会产生额外的空格。
    • -p 为您执行 while() 打印 位。
    • -e 表示这是我们要运行的 perl 代码。

    代码基本匹配:

    • 在行首和第一个引号之间。
    • 在最后一个引号和行尾之间。
    • 在两个引号之间,由于最后两个匹配,因此只能是引号之外的文本。
    • 或根本没有引号的行。

    然后它将所有一组一个或多个空白字符替换为一个空格。

    基本上replace spaces only in between quotation marks 稍作修改....

    【讨论】:

      【解决方案3】:

      您可以将 json 读入代码,然后将其输出到指定紧凑格式的文件,引号内的空格将保留在字符串中。

      在 python 中你可以使用原生的 json 库

      import json
      json.loads(your filestream)
      json.dumps(your output stream) // the native output of json.dumps is compact
      

      python 文档中的详细信息https://docs.python.org/2/library/json.html

      但是您应该能够在任何处理 json 的语言中执行相同的技术。

      【讨论】:

      • 的输出默认不是紧凑的,因为它在逗号和冒号后添加了空格。您需要将 separators=(',', ':') 参数传递给 json.dumps 以归档真正紧凑的输出。
      • 此外,json.dumps 将 Unicode 字符转义为 \uXXXX,即使 JSON 规范没有要求也是如此。因此,您的文件最终可能实际上更大,而不是更小。
      【解决方案4】:

      您可以使用jq-c--compact-output 选项:

      jq -c '' < your-file.json
      

      演示:

      $ echo '
      > {
      >   "a": "b"
      > }' | jq -c ''
      {"a":"b"}
      

      【讨论】:

      • 这是正确答案,尽管您可能还想使用-M 来切换颜色。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多