我希望能够通过将值和文本输入元素>“ JSON.stringify(txt, null, 2)
”的“值”放在该部分中来编辑对象值。
提交输入后,我在所有引号后都留下了包含“ / n”和“ \”的字符串文字。我已经尝试过使用regex和string.replace()
来删除它们,但没有任何效果,我的输出始终是这样的:
"publisher": "[{\"name\":[\"scripps re\"],\"url\":[\"url.com\"]}]",
我也尝试过JSON.parse(txt)
,它记录得很好,但结果仍然包含换行符和反斜杠。
是否有一种方法可以从输入元素中获取经过编辑的文本,然后将其转换回没有字符串文字标记的有效JSON?
我正在使用:
VueJS , JS 。
我试图像这样绑定输入字段的值:
inputVal = JSON.stringify(object[keyname])
效果很好。
分配新编辑的txt:
Vue.set(object, keyname, newValue)
newValue始终具有/n
和\
我尝试过:
Vue.set(object, keyname, newValue.replace('/n'g,""))
Vue.set(object, keyname, JSON.parse(newValue))
{
"publisher": "[{\"name\":[\"scripps re\"],\"url\":[\"url.com\"]}]",
"license": {
"text": "CC BY-NC 4.0",
"url": "http://creativecommons.org/licenses/by-nc/4.0/",
"description": "Attribution-NonCommercial 4.0 International"
}
例如,如何使用文本区域输入来编辑'license'
的值并保存回有效的JSON?
预期结果应为(是否经过美化,没有换行符):
{
"publisher": "[{"name":["scripps re"],"url":["url.com"]}]",
"license": {
"text": "CC BY-NC 4.0",
"url": "http://creativecommons.org/licenses/by-nc/4.0/",
"description": "Attribution-NonCommercial 4.0 International"
}
答案 0 :(得分:1)
正则表达式需要更正-
Vue.set(object,keyname,newValue.replace('/ng',""))
s = "[{\"name\":[\"scripps re\"],\"url\":[\"url.com\"]}]".replace('/ng', "");
console.log(s);
您也可以使用unescape()
console.log(unescape( "[\n {\n \"identifier\": [\n \"IDEN\"\n ],\n \"institute\": [\n \"fds\"\n ],\n \"agency\": [\n \"fds\"\n ]\n }\n]" ));
但是,最新的(2019年8月)MDN文档更推荐docodeURI
或decodeURIComponent
胜过unescape
答案 1 :(得分:0)
您可以使用正则表达式中的/s
字符类替换所有空白字符
例如像这样的$('textarea').value.replace(/\s/g, '')
答案 2 :(得分:0)
发现了问题!
因此,我正在检查以查看newdata的类型,以避免在字符串上使用JSON.parse并得到错误。问题是结果始终是一个字符串,因此这里的所有答案都可以使用。我将其更改为检查字符串的第一个索引以检查对象或数组。现在,它可以很好地工作,因为事情得到了适当的处理。
谢谢大家的答复,从技术上来说,您的所有答案都应该奏效,但问题是从未触发过部分编码。
if (newdata.value[0]==="{" || newdata.value[0]==="[") {
Vue.set(self.meta,keyname.value,JSON.parse(newdata.value) )
}else{
Vue.set(self.meta,keyname.value,newdata.value)
}