【问题标题】:Add commas to list of JSON object将逗号添加到 JSON 对象列表
【发布时间】:2017-12-24 19:47:53
【问题描述】:

我有一个包含对象列表的文本文件。

{ a:"1", b:"2", c: "3"}{ a:"1", b:"2", c: "3"}{ a:"1", b:"2", c: "3"}

我想让它成为有效的 Json 文件。例如:

[{ a:"1", b:"2", c: "3"},{ a:"1", b:"2", c: "3"},{ a:"1", b:"2", c: "3"}]

文件非常大 - 600mb。我需要使用可以更改文件的语言来执行此操作。我试图找到解决方案,但我找不到。

【问题讨论】:

  • 你的阵列是什么?请展示你的数组。
  • 这些对象内部可以嵌套对象吗?
  • 添加[]并将}{替换为},{?
  • 如果我们需要自己编写一个解析器,这将是一场噩梦,如果下一个元素之间有一个新行,如果没有,您需要检测大括号的开头和结尾花括号
  • 在 python 中:读取文件并将 }{ 替换为 },{ => re.sub(r'}{', '},{', file_text)

标签: javascript php python json


【解决方案1】:

KISS:将 }{ 替换为 },{ 并包含在 []

【讨论】:

  • 这不是答案。 OP 正在寻求一种方法来做到这一点,但由于文件非常大,因此无法使用简单的文件编辑器来完成。
  • 怎么不是答案?以编程方式执行,使用任何列出的语言有效地读取文件,并使用简单的标准库函数,这个过程不需要太多解释。
  • 这就是这个问题的意义所在,方法。你不认为 OP 已经知道 }{ 应该替换为 },{。所以这并不能回答问题。
  • 我正在回答 OP 所述的确切问题 - 如何使具有给定语法的文本文件成为有效的 JSON 文件,而您是假设它是其他东西的人。
【解决方案2】:

Python 中一个草率但简单的解决方案:

import json
tmp = '{ "a":"1", "b":"2", "c": "3"}{ "a":"1", "b":"2", "c": "3"}{ "a":"1", "b":"2", "c": "3"}' # test string
tmp = tmp.replace('}{', '},{') # replace '}{' with '},{'
tmp = '[' + tmp + ']' # add brackets around it
json_string = json.loads(tmp) # confirm that it's valid json
print(json_string) # print the json_string

将打印

[{'a': '1', 'b': '2', 'c': '3'}, {'a': '1', 'b': '2', 'c': '3'}, {'a': '1', 'b': '2', 'c': '3'}]

【讨论】:

    【解决方案3】:

    您好,我看到这个帮助可以作为贡献。在第一个 def comma_json 里面添加;并且 structure_json 将 [] 添加到所有内容

    def comma_json():

    with open("file1.json", "r+") as f:
        old = f.read()
        f.seek(0)  # rewind
        f.write(old.replace('}{', '},{'))
        f.close
    
    def structure_json():
      with open("file1.json", "r+") as f:
        old = f.read()
       with open("file2.json", "w") as r:
        tmps = '[' + str(old) + ']'
        json_string = json.loads(tmps)
    
        json.dump(json_string, r, indent=2)
        f.close
    

    【讨论】:

      【解决方案4】:

      不是最好的解决方案,但它可以按照以下步骤工作

      1. 如果输入是对象格式,则转换为字符串 json.stringify()
      2. 将“}{”替换为“},{”并在字符串的开头和结尾添加左括号和右括号
      3. 现在将字符串转换为对象。

      【讨论】:

      • 我做不到。我有嵌套对象: {"username":"","last_name":" ","links":[],"twitter":"","created_on":"","has_default_image":"","images ":{"50":"images","115":"images","138":"images"},"id":"","occupation":"","city":""," first_name":"","display_name":"","state":"","location":"","sections":[],"website":"","company":"","stats ":{"team_members":0,"views":0,"appreciations":0,"cmets":0,"followers":0,"following":0},"url":"","country" :"","social_links":[],"fields":[]}
      • 但您没有在要求中提到这一点。
      • 如果您需要适当的解决方案,请随时使用所需信息更新您的问题。我可以在您的 cmets 中看到嵌套对象已经用逗号分隔,但它不是有效的 json,有一些特殊字符。
      【解决方案5】:

      你可以这样使用

        [
          { "a":"1", 
            "b":"2", 
            "c": "3"
          },
          { "a":"1", 
            "b":"2", 
            "c": "3"
          },
          { "a":"1", 
            "b":"2", 
            "c": "3"
          }
       ]
      

      【讨论】:

      • 这根本不能回答问题
      猜你喜欢
      • 2017-11-30
      • 1970-01-01
      • 2020-12-03
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多