【问题标题】:Convert a String to Python Dictionary or JSON Object将字符串转换为 Python 字典或 JSON 对象
【发布时间】:2017-01-25 18:35:18
【问题描述】:

这就是问题所在 - 我有一个格式如下的字符串(注意:没有换行符)。我只是希望这个字符串在 python 字典或 json 对象中序列化以便轻松导航。我已经尝试过 ast.literal_eval 和 json 但最终结果要么是错误,要么只是另一个字符串。有时我一直在为此挠头,我知道有一个简单而优雅的解决方案,而不仅仅是编写我自己的解析器。

{
  table_name:

   {
     "columns":

   [
     {

        "col_1":{"col_1_1":"value_1_1","col_1_2":"value_1_2"},
        "col_2":{"col_2_1":"value_2_1","col_2_2":"value_2_2"},
        "col_3":"value_3","col_4":"value_4","col_5":"value_5"}],

     "Rows":1,"Total":1,"Flag":1,"Instruction":none

    }
}

【问题讨论】:

  • 问题是table_name应该被引用(如果你想使用JSON,用双引号)和none应该是None对于ast.literal_evalnull对于@987654327 @.

标签: python json dictionary serialization deserialization


【解决方案1】:

请注意,JSON 解码器要求每个属性名称用双引号括起来。
re.sub()json.loads() 函数使用以下方法:

import json, re

s = '{table_name:{"columns":[{"col_1":{"col_1_1":"value_1_1","col_1_2":"value_1_2"},"col_2":{"col_2_1":"value_2_1","col_2_2":"value_2_2"},"col_3":"value_3","col_4":"value_4","col_5":"value_5"}],"Rows":1,"Total":1,"Flag":1,"Instruction":none}}'
s = re.sub(r'\b(?<!\")([_\w]+)(?=\:)', r'"\1"', s).replace('none', '"None"')
obj = json.loads(s)

print(obj)

输出:

{'table_name': {'columns': [{'col_5': 'value_5', 'col_2': {'col_2_1': 'value_2_1', 'col_2_2': 'value_2_2'}, 'col_3': 'value_3', 'col_1': {'col_1_2': 'value_1_2', 'col_1_1': 'value_1_1'}, 'col_4': 'value_4'}], 'Flag': 1, 'Total': 1, 'Instruction': 'None', 'Rows': 1}}

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 2019-04-02
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多