有没有办法在 javascript 中使用等同于 json.dumps 的东西

Is there a way to use something equivalent to json.dumps in javascript

我正在为我的 Django 模板提供一个对象列表。我有一个条件,我正在访问模板中的对象字段之一,它是一个包含 u' 个字符的 json 字段,例如 {u'option': False, u'name': u'test string'}

我们通常在 python 中使用 json.dumps 将其转换为 {"option": False, "name": "test string"},这是我想要的 json,因为我需要访问这样的我的 javascript.

中的字符串

在 javascript 中有没有简单的方法可以做到这一点?我想避免使用正则表达式去除 u' and ' 并替换为 "

抱歉,如果这是非常基本的。不太了解javascript。

或者有没有办法从 python 以某种方式对我的对象字段 to_json 进行编码?

相当于 Python 在 JavaScript 中的 json.dumps()JSON.stringify(),如:

var jsonstr = JSON.stringify(someVariable);

有效 JSON 不包含像 u'something' 这样的结构,只包含 "something"。如果你真的有这样的字符串,它很可能来自 Python 通过 repr() 或类似的。

如果您尝试将 Python 对象从它们各自的环境中转换为 JavaScript 对象,在 Python 中,您会将它们转换为 JSON 编码字符串使用 json.dumps(),将字符串传输到 JavaScript 环境,然后使用 JSON.parse() 将它们转换回对象。

(请记住,JSON 不理解一些基本类型以外的任何内容,例如字符串、浮点数、布尔值、数组和 key:value 结构。例如,尝试传输 Python datetime 对象可能会得到字符串或集合 key:value 对而不是实际的 JavaScript Date 对象。)

不同之处在于 json.dumps 默认应用一些次要的 pretty-printing 但 JSON.stringify不,您可以在下面看到相同的内容。
Python:

 >>> import json
 >>> json.dumps({"candidate" : 5, "data": 1})
     '{"candidate": 5, "data": 1}'

Javacript:

 > JSON.stringify({"candidate" : 5, "data": 1})
   '{"candidate":5,"data":1}'

但是通过一些修改,我们可以拥有相同的 JSON 字符串,并且为了验证两者在格式上也是相同的 JSON 字符串,我们可以为两个 JSON 字符串生成散列并进行比较.有两种方法:-
  1. 修改 javascript JSON string 使其等同于 python JSON string
    Python:
    >>> import json,hashlib
    >>> a = json.dumps({"candidate" : 5, "data": 1}, sort_keys=True)
    >>> hashlib.md5(a.encode("utf-8")).hexdigest()
        '12db79ee4a76db2f4fc48624140adc7e'
    
    脚本:
    > const Crypto = require("crypto-js")
      undefined
    > const a = JSON.stringify({"candidate" : 5, "data": 1}).replaceAll(":", ": ").replaceAll(",", ", ")
      undefined
    > Crypto.MD5(a).toString(Crypto.enc.Hex)
      '12db79ee4a76db2f4fc48624140adc7e'
    
  2. 修改 python JSON string 使其等同于 javascript JSON string
    Python:
    >>> import json,hashlib
    >>> a = json.dumps({"candidate" : 5, "data": 1}, separators=(',', ':'))
    >>> hashlib.md5(a.encode("utf-8")).hexdigest()
        '92e99f0a99ad2a3b5e02f717a2fb83c2'
    
    脚本:
    > const Crypto = require("crypto-js")
      undefined
    > const a = JSON.stringify({"candidate" : 5, "data": 1})
      undefined
    > Crypto.MD5(a).toString(Crypto.enc.Hex)
      '92e99f0a99ad2a3b5e02f717a2fb83c2'
    

    Note:- To run javascript code, crypto-js npm pkg should be installed as same location where you started the node shell.