我的原始输入文件如下(总计1.3MB)
{ " dataFrame":" AB3hqqqpVVVOAAA =", "解密":是的, " fcnt":3, " id":1480528200533, " port":5, " rssi":-116, " sf_used":10, " snr":-8.5, " timestamp":" 2016-11-30T17:50:00.533Z" }, { " dataFrame":" AB3hqqqpVVVOAAA =", "解密":是的, " fcnt":5, " id":1480528235613, " port":5, " rssi":-119, " sf_used":10, " snr":-5.8, "时间戳":" 2016-11-30T17:50:35.613Z" },
当我运行infile = json.load(infile)时,我收到如下错误
无法解码JSON对象
它适用于相同数据的一小部分..
答案 0 :(得分:1)
假设你只需要删除DEBUG:root:
部分,其余部分是某种类型的Python文字(没有嵌入的换行符),我建议通过让Python解析文字来简化你的代码,{{ 3}}
有点不清楚你在做什么,所以我无法提供确切的代码;你的行显然是三个冒号分隔的字段(你只跳过一个),其中最后一个字段是list
字面(你表现得像一个dict
)。
无论哪种方式,一旦你修剪了记录前缀,你就可以这样做:
value = ast.literal_eval(literal_string)
让Python使用自己的文字解析机制来执行转换。
答案 1 :(得分:0)
通过字典循环将返回键。
d={"a":1, "b":2}
for key in d:
print(key)
将输出" a"和" b"。
循环决定词的另一种方法是:
d={"a": 1, "b": 2}
for key, val in d.items():
print(key, val)
在您的代码中,line
应仅包含密钥。
我认为您需要将if块更改为:
for line, val in infile.items():
if line.strip() in keep:
csvlines.append(val.strip())
上面的代码是python 3.我想在python 2中,而不是items()
,你会使用iteritems()
我担心我无法解释keyerror
。键应该是字符串,索引应该适用于字符串。
不完全确定为什么会出错。但是在任何情况下,您都不想在字符串键中追加第二个字符,您想要附加属于该键的值。
在使用它之前,你能看一下行吗?
for line in infile:
print(line) # <------------------- here
if line[0].strip() in keep:
csvlines.append(line[1].strip())