如何在python中将json unicode响应转换为字符串?

时间:2018-03-27 06:07:41

标签: python json unicode unicode-string

我的json响应如下:

response ={u'connections': [{u'pair': [u'5', u'14'], u'routes': 
      [[u'5', u'6', u'13', u'14'], [u'5', u'7', u'10', u'4', 
      u'14']]}], u'succeeded': True})

我需要将此unicode字符串转换为字符串。

我希望它看起来像:

response={'connections': [{'pair': ['5', '14'], 'routes': [['5', '6', 
     '13', '14'], ['5', '7', '10', '4', '14']]}], 'succeeded': True})

如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

除非你有充分的理由这样做,否则你真的不应该这样做。你的代码应该在内部使用unicode,并且只在边缘和边缘处编码字节进行转换,你可能会写出像json.dump(response)这样的东西,而不是单独的response的元素。 (更不用说大多数您可能正在使用它的库,例如requestsFlask,已经为您执行了此编码。)

但是,如果你真的想要转换由unicode字符串组成的任意结构中的所有字符串,其他不需要转换的原子,以及列表和dicts作为唯一的集合,你有在您访问它时,遍历结构并对每个字符串进行编码。像这样:

def deep_encode(obj, encoding):
    if isinstance(obj, unicode):
        return obj.encode(encoding)
    elif isinstance(obj, dict):
        return {deep_encode(key, encoding): deep_encode(value, encoding) for key, value in obj.items()}
    elif isinstance(obj, list):
        return [deep_encode(item, encoding) for item in obj]
    else:
        return obj

答案 1 :(得分:1)

以下是我对给定问题的解决方案:

import json, ast
mynewDix = {}
response ={u'connections': [{u'pair': [u'5', u'14'], u'routes': 
      [[u'5', u'6', u'13', u'14'], [u'5', u'7', u'10', u'4', 
      u'14']]}], u'succeeded': True}

for key in response.keys():

    if type(response[key]) == bool :
            valueToDump = json.dumps(str(response[key]))
    else:
        valueToDump =  json.dumps(response[key])

    mynewDix[ast.literal_eval(json.dumps(key))] = ast.literal_eval(valueToDump)
print mynewDix

输出:{'connections':[{'pair':['5','14'],'routes':[['5','6','13','14' ],['5','7','10','4','14']]}],'成功':'真'}

我不确定成功的值会因为字符串为你而生效吗?

希望这会有所帮助。