Javascript 在输入字段值中存储JSON字符串
如何在隐藏的输入字段中存储Json字符串。好吧,我可以通过编程来实现,但是转义有点问题。由于我的字符串长度适中,很难对所有名称转义“char”。请解释它是如何以编程方式工作的(第1阶段),因为控制台输出看起来是一样的Javascript 在输入字段值中存储JSON字符串,javascript,jquery,Javascript,Jquery,如何在隐藏的输入字段中存储Json字符串。好吧,我可以通过编程来实现,但是转义有点问题。由于我的字符串长度适中,很难对所有名称转义“char”。请解释它是如何以编程方式工作的(第1阶段),因为控制台输出看起来是一样的 [{X:0,Y:0,W:0,H:500},{X:358,Y:62,W:200,H:500}]test2.html:21 [{“X:0,Y:0,W:0,H:500},{“X:358,Y:62,W:200,H:500}] test2.html:22 通过阶段1 jquery.min.j
[{X:0,Y:0,W:0,H:500},{X:358,Y:62,W:200,H:500}]test2.html:21
[{“X:0,Y:0,W:0,H:500},{“X:358,Y:62,W:200,H:500}]
test2.html:22
通过阶段1
jquery.min.js:16未捕获的语法错误:输入意外结束
谢谢
bsr
试验
$(文档).ready(函数(){
myItems=[{“X”:0,“Y”:0,“W”:0,“H”:500},
{“X”:358,“Y”:62,“W”:200,“H”:500}]
log(JSON.stringify(myItems));
$(“#jsondata”).val(JSON.stringify(myItems));
log(document.getElementById(“jsondata”).value);
控制台日志(“通过阶段1”);
var obj=jQuery.parseJSON($(“#jsondata2”).val();
控制台日志(对象长度);
控制台日志(“通过阶段2”);
});
编辑: 下面的代码有效。不确定它是否正确。因此将标记一个好的解释作为答案。谢谢
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Test</title>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
<input type="hidden" id="jsondata" />
<input type="hidden" id="jsondata2" value='[{"X":0,"Y":0,"W":0,"H":500},{"X":358,"Y":62,"W":200,"H":500}]'/>
<script >
$(document).ready(function() {
myItems = [{"X":0,"Y":0,"W":0,"H":500},
{"X":358,"Y":62,"W":200,"H":500}]
console.log(JSON.stringify(myItems));
$("#jsondata").val(JSON.stringify(myItems));
console.log(document.getElementById("jsondata").value);
console.log("PASSED PHASE 1");
var obj = jQuery.parseJSON($("#jsondata2").val());
console.log($("#jsondata2").val());
console.log(obj[0].H);
console.log("PASSED PHASE 2");
});
</script>
</body>
</html>
试验
$(文档).ready(函数(){
myItems=[{“X”:0,“Y”:0,“W”:0,“H”:500},
{“X”:358,“Y”:62,“W”:200,“H”:500}]
log(JSON.stringify(myItems));
$(“#jsondata”).val(JSON.stringify(myItems));
log(document.getElementById(“jsondata”).value);
控制台日志(“通过阶段1”);
var obj=jQuery.parseJSON($(“#jsondata2”).val();
log($(“#jsondata2”).val());
console.log(obj[0].H);
控制台日志(“通过阶段2”);
});
试试下面的代码,我觉得你有一个数组而不是对象
myItems = { data : [{"X":0,"Y":0,"W":0,"H":500},
{"X":358,"Y":62,"W":200,"H":500}] };
请参阅关于引号的答案 原因很简单——当您有以下代码时: [sometag someattr="qwerty"123":cxzcxz"/] [sometag somettr=“qwerty”123”:cxzcxz/] 浏览器将其理解为: [sometag someattr="qwerty"/] [sometag somettr=“qwerty”/ 最后一部分(123“:cxzcxz”)只是作为垃圾扔掉。因此,对于您的具体案例,parseJSON尝试处理以下内容: [{ [{ 但你认为这是一个完整的字符串,比如: [{"X":0,"Y":0,"W":0,"H":500},{"X":358,"Y":62,"W":200,"H":500}] [{“X:0,Y:0,W:0,H:500},{“X:358,Y:62,W:200,H:500}]
因此,最好在服务器端输入隐藏字段的值之前对json进行编码。html标记无效…如果对第一个html(非工作html)再次运行html验证程序,您会发现行中有错误…您可以这样做,但这很糟糕,html:
<textarea id="jsondata" sytle="display:none"></textarea>
您是想将其存储在一个隐藏字段中以便以后使用,还是想通过表单提交它?我正在将Json字符串存储在一个隐藏字段中,并通过服务器端的模板呈现值。在客户端,我将其解析为对象数组并使用它进行进一步表示OK..以下操作有效…,如果有的话有一个很好的解释,我会把它标记为答案。谢谢你的帮助如果你在服务器端渲染它,为什么不把它渲染成脚本块,不用解析就立即使用它呢?安全考虑?我想你没有抓住问题的重点。他问为什么当数据通过javascript注入到字段时会这样工作,但当数据位于字段的value属性中时,它不工作。@Gazler:我不理解not。我看到
stringify()
work和parseJSON()
notwork。parseJSON()
失败,因为它不是有效的JSON。我给出了有效的JSON:solved。@Hogan,如果你运行代码,你会看到这两个方法正在使用不同的数据。stringify()和parseJSON()都可以工作。Hogan我如你所说更改了数据,输入到相应的,仍然是相同的错误。因此,这可能与转义字符有关”value=“{”data”:[{“X”:0,“Y”:0,“W”:0,“H”:500},{“X”:358,“Y”:62,“W”:200,“H”:500}]}“
是错误的,正如@rachet指出的那样,在由分隔的属性中不能有”
。你必须将它与混为一谈“
和”
。正是这样的颜色化是发现类似问题的好帮手。这不是结论,请参见jQuery API中的parseJSON var obj=jQuery.parseJSON(“{”name:“John”}”);alert(obj.name==”John“)示例;…这也是,到目前为止,我遇到的最常见的错误与对象键有关。在JSON中(与JavaScript不同),这些字符串必须是双引号字符串。事实上,JSON中的所有字符串都必须用双引号括起来(JavaScript也允许单引号;JSON不允许单引号)。参考:如果{'X':0,'Y':0,'W'W':0,'H':500}来..???该值将不正确..好的捕获..第一个关于名称空间的错误,因为该文件最初是一个xhtml文件,然后我删除了几个部分..第二个错误,关于额外的间距,不确定..需要阅读更多..谢谢这是一个好的解决方案,但有一个小问题。如果值将包含“
字符串JSON将中断,因为Textarea正在自动解码HTML实体,因此它将转换为”
。例如{x:“a”,y:“b”c}
将转换为{x:“a”,y:“b”c}
[{
[{"X":0,"Y":0,"W":0,"H":500},{"X":358,"Y":62,"W":200,"H":500}]
<textarea id="jsondata" sytle="display:none"></textarea>
$(function(){
var myItems = [{"X":0,"Y":0,"W":0,"H":500}, {"X":358,"Y":62,"W":200,"H":500}]
$("#jsondata").val(JSON.stringify(myItems));
});