如何将字符串(类似于json)转换为json对象?

时间:2014-03-07 18:57:23

标签: python json

 if(i!=0):
     json_str+=str({"tag_namespace": "dba_inops", "tag_key": "db_schema", "tag_value": "" + schema_arr.pop(i) + ""},)+","
     machine_arr.pop(i);
     #print json_str
 else:
     json_str+=str({"tag_namespace": "dba_inops", "tag_key": "db_schema", "tag_value": "" + schema_arr.pop(i) + ""})
     new_machine=machine_arr.pop(i);
     print json_str;

SO OUTPUT json_string就像:

{'tag_key': 'db_schema', 'tag_namespace': 'dba_inops', 'tag_value': 'xyz'}

但是: -

new_tagmap.map=[json_str]
print new_tagmap.map;

当我尝试将构造的json_str放入数组时,我在数组括号之后得到双引号,这是一个无效的json。

["{'tag_key': 'db_schema', 'tag_namespace': 'dba_inops', 'tag_value': 'xyz'}"]

如果我替换了第一个和最后一个字符,它将替换{。

有没有办法将这样的字符串转换为json,这样我就可以直接将它作为json对象加载到数组中而不用“”。

还是无法添加这样的东西: -

    {'tag_namespace': 'dba_inops', 'tag_key': 'db_name', 'tag_value': 'hi' },
    {'tag_namespace': 'dba_inops', 'tag_key': 'db_name', 'tag_value': 'abc' }

它说

引发ValueError(errmsg(“Extra data”,s,end,len(s))) ValueError:额外数据:第1行第77列 - 第1行第78列(字符77 - 78)当我执行load()时,两个列表之间的bcoz。

1 个答案:

答案 0 :(得分:4)

我建议使用Python内置的json解析器。这是documentation for it。您可以使用json.loads创建结构,并使用json.dumps对其进行解码。该链接有许多易于理解的示例。

如果要添加或更改对象,则应在其Python表示中执行此操作。因此,例如,假设我加载了以下JSON字符串:

>>> x = json.loads('{ "animals": ["cat", "dog", "fish"], "numbers": [1, 2, 3], "people": ["joe", "sally", "beth"] }')

它创建了一个Python字典。字典中的每个条目都包含一系列内容:

>>> x
 {u'animals': [u'cat', u'dog', u'fish'],
 u'numbers': [1, 2, 3],
 u'people': [u'joe', u'sally', u'beth']}

现在让我们假设我想在动物列表中添加“鼠标”。我可以使用Python的list append函数直接使用Python代码。不需要字符串操作!这更好,更清洁。

x['animals'].append("mouse")

现在让我们将Python对象重新转换为JSON。看哪!

>>> my_new_json_string = json.dumps(x)
>>> print my_new_json_string
{"animals": ["cat", "dog", "fish", "mouse"], "numbers": [1, 2, 3], "people": ["joe", "sally", "beth"]}