如何解析txt文件中间的json格式文本

时间:2018-09-28 04:18:22

标签: python json

我有一个txt文件,其中包含一些纯文本和一个json样式的文本块。我想解析txt并将json块提取到python dict对象中。

例如,txt文件可能如下所示:

1234567
asdfjkl
{
  "Name": {
    "given ": "kevin"
  },
  "info": [
    "asdf",
    "fda",
    "sdf"
  ]
}

,每个txt中只有一个合法的json块。在json包中找不到任何内容。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

正如您所说,JSON始终在后面:

from ast import literal_eval
with open('filename.txt','r') as f:
   s=f.read()
   print(literal_eval(s[s.index('{')-1:]))

更好地使用json.loads

from json import loads
with open('filename.txt','r') as f:
   s=f.read()
   print(loads(s[s.index('{'):]))

两个输出:

{'Name': {'given ': 'kevin'}, 'info': ['asdf', 'fda', 'sdf']}

答案 1 :(得分:0)

如果您控制输入,请不要这样操作。如果输入端的gal或gal是客户/老板,请屏住呼吸诅咒代码之神,并编写如下帮助函数:

# returns a list of plaintext lines and a json string.
def split_text_and_json(filename):
    textlines = []
    jsonlines = []
    bracketcount = 0

    with open(filename) as f:
       for line in f.readlines():
           bracketcount += line.count('{')

           if bracketcount:
               jsonlines.append(line)
           else:
               textlines.append(line)
           bracketcount-=line.count('}')
    return (textlines, ''.join(jsonlines))

plaintextpart, jsonpart = split_text_and_json('file.txt')

如果始终保证将JSON作为文件的最后一部分,则可以内联进行此操作。

现在要解决坏问题:您需要处理json之外包含{}字符的文件。在这种情况下,当您尝试加载json时,此脚本将引发错误。