【问题标题】:How to Convert Text in Non-structured Format to JSON Format如何将非结构化格式的文本转换为 JSON 格式
【发布时间】:2021-12-24 03:31:55
【问题描述】:

示例输入文本的内容

{'key1':'value1','msg1':"content1"} //line 1
{'key2':'value2','msg2':"content2"} //line 2
{'key3':'value3','msg3':"content3"} //line 3

另外,指出输入文本的一些显着特征

  • 缺少适当的分隔符,目前每个对象 {...} 都换行“\n”
  • 包含单引号,这可能是个问题,因为 JSON(预期输出)只接受双引号
  • 没有 JSON 所需的左大括号和右大括号

预期输出 JSON

{
   {
      "key1":"value1",
      "msg1":"content1"
   },
   {
      "key2":"value2",
      "msg2":"content2"
   },
   {
      "key3":"value3",
      "msg3":"content3"
   }
}

我尝试过,但失败了

  • json.dumps(input_text),但无法将“\n”识别为“分隔符”
  • 在每个对象 {...} 的末尾附加逗号,但遇到最后一个对象时多余逗号的问题

【问题讨论】:

  • 为什么aws lambda与问题有关?

标签: python json aws-lambda


【解决方案1】:

如果每行有一本字典,则可以用 , 替换换行符并将整个内容括在括号中 [,] (你会得到一个字典列表)。
您可以使用ast.literal_eval 将您的文件导入为字典列表。
最后导出为json:

import json
import ast
with open("file.txt", "r") as f:
    dic_list = ast.literal_eval("[" + f.read().replace('\n',',') + "]")

print(json.dumps(dic_list, indent=4))

输出:

[
    {
        "key1": "value1",
        "msg1": "content1"
    },
    {
        "key2": "value2",
        "msg2": "content2"
    },
    {
        "key3": "value3",
        "msg3": "content3"
    }
]

【讨论】:

  • ast.literal_eval(",".join(f.read().splitlines()))
【解决方案2】:

只需使用ast

import ast
with open('test.txt') as f:
  data = [ast.literal_eval(l.strip()) for l in f.readlines()]
print(data)

输出

[{'key1': 'value1', 'msg1': 'content1'}, {'key2': 'value2', 'msg2': 'content2'}, {'key3': 'value3', 'msg3': 'content3'}]

【讨论】:

  • [ast.literal_eval(l) for l in f]
猜你喜欢
  • 2015-01-05
  • 2021-10-05
  • 2016-06-08
  • 2022-07-05
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 2017-10-10
相关资源
最近更新 更多