删除&q;并使用json.loads函数加载字符串

时间:2018-06-20 07:17:48

标签: python json

我正在尝试使用python中的json.loads函数在json字符串下加载。 但是&q;不是有效的json对象。

我有办法删除它吗? 我在下面提供了一个示例:

[{&q;Id&q;:1,&q;Name&q;:&q;Name}]

2 个答案:

答案 0 :(得分:1)

尝试用双引号&q; " import json data = '[{&q;Id&q;:1,&q;Name&q;:&q;Name&q;}]' data = data.replace('&q;', '"') print(json.loads(data))

[{'Id': 1, 'Name': 'Name'}]

输出

{{1}}

答案 1 :(得分:0)

Angular 对 transfer state 使用特殊的 escapeHtml 函数。您可以找到那些 escapeHtml/unescapeHtml 函数 here

export function escapeHtml(text: string): string {
  const escapedText: {[k: string]: string} = {
    '&': '&a;',
    '"': '&q;',
    '\'': '&s;',
    '<': '&l;',
    '>': '&g;',
  };
  return text.replace(/[&"'<>]/g, s => escapedText[s]);
}

export function unescapeHtml(text: string): string {
  const unescapedText: {[k: string]: string} = {
    '&a;': '&',
    '&q;': '"',
    '&s;': '\'',
    '&l;': '<',
    '&g;': '>',
  };
  return text.replace(/&[^;]+;/g, s => unescapedText[s]);
}

您可以使用以下代码在 python 中重现此转义函数:

import json

unescapedText = {
    '&a;': '&',
    '&q;': '"',
    '&s;': '\'',
    '&l;': '<',
    '&g;': '>',
}

def unescape(str):
    for key, value in unescapedText.items():
        str = str.replace(key, value)
    return str

state = "[{&q;Id&q;:1,&q;Name&q;:&q;Name&q;}]"
decoded = json.loads(unescape(state))

print(decoded)

repl.it:https://replit.com/@bertrandmartel/AngularTransferStateDecode2