【问题标题】:Multiple JSON objects in one file - possible to turn into one object using gsub?一个文件中的多个 JSON 对象 - 可以使用 gsub 变成一个对象吗?
【发布时间】:2016-12-15 21:49:51
【问题描述】:

我一直在执行将具有多个 JSON 对象的文件转换为 CSV 的任务。为了让事情变得更简单,我决定将这些对象转换为一个对象,这样我就可以更轻松地解析它。这是我的问题:由于数据文件只是一堆没有逗号的数组,我不能使用 flatten 方法。 数据文件如下所示:

[{"field1": "sample1", "field2":"sample2"}]
[{"field3":"sample3", "field4":"sample4"}]

如您所见,它是一堆数组,它们之间没有逗号。

所以我的想法是遍历每个数组,用“,”替换任何“][”实例,然后让我的程序像这样解析它。

所以我的目标是让文件看起来像:

[{"field1": "sample1", "field2":"sample2"}, {"field3":"sample3", "field4":"sample4"}]

我一直在尝试使用的代码是:

data.gsub(/\s(?=[\]\[]), ","/)

我相当肯定这与我的正则表达式有关。由于我正在尝试解析“] [”,因此我尝试使用其他正则表达式,但它们似乎都没有真正做我需要做的事情。

现在这行不通。我也在考虑尝试使用 scan 或 insert,但 gsub 似乎是删除那些内括号并用逗号替换它们的最佳方法。

对于建议尝试在 JSON 对象上使用 .foreach 循环的任何人,这对我不起作用,因为 .foreach 循环不会解析同一文件中的单独对象。也许我还没有找到一个真正适用于多个 JSON 对象的方法,但是如果有人有一个有效的方法,我也会尝试一下。

【问题讨论】:

    标签: arrays json ruby regex parsing


    【解决方案1】:

    您需要做的就是找到右括号,后跟换行符和左括号。

    data.gsub(']\n[', ',')
    

    希望这行得通!

    【讨论】:

    • 感谢您的建议,但它似乎不起作用。还有其他想法吗?
    • 我试过了,效果很好。只是为了确保我和你在同一页上,你有一个文件,其中每一行都是一个包含数组的字符串。我对吗?你能分享一个包含该文件的要点吗?我会尝试解析它。
    • 感谢您的帮助。这是我正在使用的示例 JSON 的链接:gist.github.com/anfperez/a73325cb05d41c4f0770c5115811e28a
    • 你可以在你的原始文件上使用JSON.parse,ruby 会为你做这件事...stackoverflow.com/questions/31100098/json-parsing-in-ruby
    【解决方案2】:
    data.gsub(']\n[', ',')
    

    感谢您的建议,但它似乎不起作用。

    那是因为只有双引号字符串表达式受反斜杠符号和插值,因此它必须是

      data.gsub("]\n[", ',')
    

    --------

    主要区别在于双引号 String 文字支持字符串插值和全套转义序列。

    例如,它们可以通过插值包含任意 Ruby 表达式:

    # Single-quoted strings don't support interpolation
    puts 'Now is #{Time.now}'
    # Now is #{Time.now}
    
    # Double-quoted strings support interpolation
    puts "Now is #{Time.now}"
    # Now is 2016-07-21 12:43:04 +0200
    

    双引号字符串也支持entire set of escape sequences,包括"\n""\t"...

    puts 'Hello\nWorld'
    # Hello\nWorld
    
    puts "Hello\nWorld"
    # Hello
    # World
    

    ...虽然单引号字符串支持 no 转义序列,但保留了使单引号字符串有用所需的最小集合:文字单引号和反斜杠,'\'''\\'分别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多