for循环与json.loads问题

时间:2017-11-22 14:43:29

标签: python

我有一个包含2个JSON的文件(Log.txt) - 每行一个:

{"ts":"2017-11-19T11:11:01.394","v":{"path":"D:\\Tableau Extract\\Logs\\log.txt"}}
{"ts":"2017-11-19T11:11:01.394",["v":{"path":"D:\\Tableau Extract\\Logs\\log_bk.txt"]}}

我尝试迭代每一行并将其作为JSON格式读取,但是,当我的循环到达第二行时,由于JSON之前的方形barrackts而失败。

当我尝试运行以下代码时:

import json
for row in df['ColumnName']:
    x = json.loads(row)
    print x

我收到以下错误:

  

{" TS":" 2017-11-19T11:11:01.394"" V" {"路径&#34 ;: " d:\的Tableau   Extract \ Logs \ log.txt"}} Extract \ Logs \ log.txt"}} TypeError:expected   字符串或缓冲区

请注意,Python会打印第一行,但在另一行上会失败。 有任何建议如何处理这种不一致?

我正在使用带有Jupyter Notebook的Python 2.7。

谢谢, 阿萨夫

1 个答案:

答案 0 :(得分:1)

这里有一些"维修"只需删除括号即可显示第2行中的字符串。它在Python 2和Python 3中使用给定的数据,但它可能在更复杂的数据上失败。

import json

data = r'''
{"ts":"2017-11-19T11:11:01.394","v":{"path":"D:\\Tableau Extract\\Logs\\log.txt"}}
{"ts":"2017-11-19T11:11:01.394",["v":{"path":"D:\\Tableau Extract\\Logs\\log_bk.txt"]}}
'''.splitlines()

for row in data:
    if not row:
        continue
    row = row.replace('[', '').replace(']', '')
    d = json.loads(row)
    print(d)

Python 2输出

{u'ts': u'2017-11-19T11:11:01.394', u'v': {u'path': u'D:\\Tableau Extract\\Logs\\log.txt'}}
{u'ts': u'2017-11-19T11:11:01.394', u'v': {u'path': u'D:\\Tableau Extract\\Logs\\log_bk.txt'}}