如何在Python3中从行json文件中获取实际字符串?

如何在Python3中从行json文件中获取实际字符串?,json,python-3.x,Json,Python 3.x,我必须读一行json并从每行中提取密钥。最终,这将从ES的索引中删除 但是,在读取文件时,提取的值为: b'74298dcbd08507175b94fbe5c2a6a87d'而不是74298dcbd08507175b94fbe5c2a6a87d。从文件中读取行的代码是: json文件由以下行组成: {"b'af2f9719a205f0ce9ae27c951e5b7037'": "\"b'af2f9719a205f0ce9ae27c951e5b7037'\""} {"b'2b2781de47c70

我必须读一行json并从每行中提取密钥。最终,这将从ES的索引中删除

但是,在读取文件时,提取的值为:
b'74298dcbd08507175b94fbe5c2a6a87d'
而不是
74298dcbd08507175b94fbe5c2a6a87d
。从文件中读取行的代码是:

json文件由以下行组成:

{"b'af2f9719a205f0ce9ae27c951e5b7037'": "\"b'af2f9719a205f0ce9ae27c951e5b7037'\""}
{"b'2b2781de47c70b11576a0f67bc59050a'": "\"b'2b2781de47c70b11576a0f67bc59050a'\""}
{"b'6cf97818c6b5c5a94b7d8dbb4cfcfe60'": "\"b'6cf97818c6b5c5a94b7d8dbb4cfcfe60'\""}
{"b'ceaf66243d3eb226859ee5ae7eacf86a'": "\"b'ceaf66243d3eb226859ee5ae7eacf86a'\""}
{"b'164a12ea5947e1f51566ee6939e20a2e'": "\"b'164a12ea5947e1f51566ee6939e20a2e'\""}
{"b'42e9bb704c424b49fb5e6adb68157e6f'": "\"b'42e9bb704c424b49fb5e6adb68157e6f'\""}

对字符串进行如下解码:

b'a_字符串”。解码('utf-8')

您将得到“a_string”

对字符串进行如下解码:

b'a_字符串”。解码('utf-8')

您将获得“a_string”

可以改进输入以避免这些卷积,但要解决您的直接问题:

您的字典似乎由一个键和与value相同的数据组成(更“字符串化”,我们将忽略该部分)

首先使用
ast.literal\u eval
进行计算,然后解码键以转换为字符串:

>>> import ast
>>> s = "b'af2f9719a205f0ce9ae27c951e5b7037'"
>>> ast.literal_eval(s).decode()
'af2f9719a205f0ce9ae27c951e5b7037'

(与
eval
相反,这种评估方法没有安全问题:)

可以改进输入,以避免这些卷积,但要解决眼前的问题:

您的字典似乎由一个键和与value相同的数据组成(更“字符串化”,我们将忽略该部分)

首先使用
ast.literal\u eval
进行计算,然后解码键以转换为字符串:

>>> import ast
>>> s = "b'af2f9719a205f0ce9ae27c951e5b7037'"
>>> ast.literal_eval(s).decode()
'af2f9719a205f0ce9ae27c951e5b7037'

(与
eval
相反,这种评估方法没有安全问题:)

我可以保证
ast.literal\u eval
会失败很多,就像我在其他案例中读到的那样。还有其他更可靠的方法吗?或者我可能会错误地考虑<代码> AST。还有其他更可靠的方法吗?或者也许我错了考虑<代码> AST。