JSON转储一个由单引号包围并包含转义单引号的字符串



我正在开发Django web应用程序,遇到了一个问题。我有一个页面,我在MySQL表中列出了所有结果,它运行良好。

{% for row in db_list %}
<tr>
<th scope="row">{{ row.description }}</th>
<td>
<button type="submit" name="instance" value="{{ row }}" class="btn btn-primary" title="OPEN TABLE" id="test"><i class="fas fa-list-ul"></i></button>
</td>
</tr>
{% endfor %}

根据选择,我必须显示所选表的关系,它可以很好地使用变通方法,但它不是通用的。

正如您所看到的,我正在做的是将一行json传输回来。

db_list为:

{
"db_list": [
{
"description": "description",
"table_name": "table_name",
"database_name": "database_name"
},
{
"description": "description",
"table_name": "table_name",
"database_name": "database_name"
},
{
"description": "description",
"table_name": "table_name",
"database_name": "database_name"
}
]
}

我希望传输这样的json:

{ 
"description": "description", 
"table_name": "table_name", 
"database_name": "database_name" 
}

在这种情况下,我会用json.dumps((处理它,并用一个简单的命令检索执行查询所需的字段,一切都会好起来

但是我得到了一个转义字符串,它被两个引号包围
'{
'description': 'description', 
'table_name': 'table_name', 
'database_name': 'database_name'
}'

这意味着这是一根非常奇怪的绳子

因为有引号,如果我尝试`json.dump((`这个字符串,我会得到一个进一步的环绕
'"{
'description': 'description', 
'table_name': 'table_name', 
'database_name': 'database_name'
}"'



如果我尝试执行dumped_json['description'],它会说参数必须是整数。。因为当然,这仍然不是一句格言。即使我把它扔掉了。

我已经尝试过用dict((包围,但没有。
我已经尝试用其他引号替换引号或什么都不替换,但没有,没有引号就无法转储,如果用双引号替换,我会不断看到转义

问题是:从技术上讲,它一直是一个字符串。如果我试着把它打印出来,它当然是无法逃脱的。json的[0]是{(相反,是"以防我转储"(,而不是'。已经尝试了ascii解码和所有这些东西。字符串中似乎没有"物理"转义符。

我想表扬我的儿子@Seth250,他给了我一半的解决方案

我所要做的只是简单地使用literal_eval,而不是将其与json-lib一起转储,而是简单地将literal_eval'ed字符串包围到dict中。

instance = ast.literal_eval(string_with_escapes)
instance_json = dict(instance)

结果实际上是:

{
'description': 'description', 
'table_name': 'table_name', 
'database_name': 'database_name'
}

这正是我所期望的,现在我可以完全检索到我需要的字段

最新更新