簡體   English   中英

json.dumps 將對象作為字符串而不是 JSON 對象返回

[英]json.dumps returns the objects as a string instead of a JSON object

views.py中: data1 = Inventory.objects.values_list('product_number','amount') data = json.dumps(list(data1), cls=DjangoJSONEncoder) 我將data作為上下文傳遞給 html 文件。

在 HTML 文件中,使用 JS 我使用以下代碼訪問 JSON 對象:

{{ data|json_script:"hello-data" }}
<script type="text/javascript">
    var data = JSON.parse(document.getElementById('hello-data').textContent);
    document.getElementById('id_line_one').onchange = function(event){
            console.log(typeof data)
            alert(data);
            document.getElementById('id_line_one_unit_price').value = data[this.value];
};

</script>

我希望var data是一個字典,但它似乎是一個字符串。 Object.fromEntries不起作用,我收到錯誤Uncaught TypeError: Iterator value [ is not an entry object at Function.fromEntries (<anonymous>) JSON.parse正在刪除雙引號,我得到[[1, 56000], [2, 55000]]但我無法將其作為字典訪問。 每當我使用索引訪問它時,它都會返回單個字符作為輸出,而不是將其視為 dict 對象。 如何將其轉換為字典? 謝謝

問題是您正在從以下行獲取列表:

data1 = list(Inventory.objects.values_list('product_number','amount'))

因此,您只是將一個列表轉換為 JSON,然后解析此 JSON,從而生成一個列表。

嘗試改用以下內容:

from django.core.serializers.json import DjangoJSONEncoder
from django.core import serializers
data_obj_model = Inventory.objects.all()
data1=serializers.serialize('json', data_obj_model, cls=DjangoJSONEncoder)

然后,您可以在 JavaScript 代碼中使用data["fields"].field_of_interest訪問模型的所有字段。

或者您也可以使用您感興趣的兩個字段創建一個自定義字典,如下所示:

data1 = dict(Inventory.objects.values_list('product_number','amount'))

這可以在解析后用作 JavaScript 中的字典。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM