我从django-rest-framework api调用中得到以下项目:
services = "['service1', 'service2', 'service3']"
我想要services = ['service1', 'service2', 'service3']
在我的JavaScript中,我尝试services = JSON.parse(services)
- 没有做任何事情,也试过$.parseJSON(services)
。
在我的序列化程序中,我尝试将设置服务设为ListField
,同时尝试JSONSerializerField()
class JSONSerializerField(serializers.Field):
# Adapted from http://stackoverflow.com/a/28200902
def to_internal_value(self, data):
return json.loads(data)
def to_representation(self, value):
return value
答案 0 :(得分:3)
您需要使用双引号而不是单引号。
这应该有效:
services = '["service1", "service2", "service3"]'
JSON.parse(services)`
答案 1 :(得分:1)
为了确保Django和某些javascript浏览器代码之间的正确解析,请确保在控制器中返回JsonResponse()。这可以确保您可以使用Javascript中的JSON.parse()来解析它。
答案 2 :(得分:0)
我最近发现了一种解决类似问题的迂回方法。我想将数组作为数据属性存储在 HTML 元素中,以便稍后在 JS 中使用它。但是,这样的 HTML 属性只能存储为字符串。为了解决这个问题...
["test 1", "test 2", "test 3"]
写为 “test 1,test 2,test 3”
)。<div data-somedata="test 1,test 2,test 3"></div>
)let stillString = $("[data-something]").attr('data-something');
console.log(stillString);
let nowArray = stillString.split(",");
console.log(nowArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-something="test 1,test 2,test 3"></div>
这可能看起来不太漂亮,将数组保留为字符串,但它完成了工作,您的普通用户不会知道其中的区别。
注意:您不必使用逗号。你真的可以使用任何字符。唯一重要的是,您尝试分隔的值都不包含您选择将它们拆分的字符。
答案 3 :(得分:0)
尝试使用:
var services = "['service1', 'service2', 'service3']"
services = services .split(",");
services [0] = services [0].substring(1);
services [services .length - 1] = services [services .length - 1].substring(
0,
services [services .length - 1].length - 1
);
services .forEach((x, i) => {
services [i] = services [i].includes('"') ? services [i].replaceAll('"', "").trim()
: services [i].replaceAll("'", "").trim();
});
console.log(services );