Javascript JSON.parse:JSON数据后出现意外的非空白字符
我希望创建一个JSON对象,它是从4个选择菜单的所选选项派生的。这些菜单可能在加载时选择了选项(由于服务器端技术),也可能没有选择任何选项!一旦使用$(document).ready()加载页面,我的脚本就会运行…但是JSON对象“JSON.parse:JSON数据后出现意外的非空白字符”” 我希望我的JSON具有以下结构Javascript JSON.parse:JSON数据后出现意外的非空白字符,javascript,jquery,json,Javascript,Jquery,Json,我希望创建一个JSON对象,它是从4个选择菜单的所选选项派生的。这些菜单可能在加载时选择了选项(由于服务器端技术),也可能没有选择任何选项!一旦使用$(document).ready()加载页面,我的脚本就会运行…但是JSON对象“JSON.parse:JSON数据后出现意外的非空白字符”” 我希望我的JSON具有以下结构 selObj = { category: selectedCategory, // we can only have 1 category, this isn’t
selObj = {
category: selectedCategory, // we can only have 1 category, this isn’t giving me a problem…
catOptions:{
optionValue:discountValue, // we can have many of these
optionValue:discountValue,
optionValue:discountValue
},
tariff:{
tariffValue:discountValue, // we can have many of these
tariffValue:discountValue
},
tarOptions:{
tarOption:discountValue, // we can have many of these
}
};
好的,这是我的函数,为了简化,我删除了一些项,但是我将一个原始的空对象作为参数传递到函数中,然后希望对其进行修改,因为如果/当选择菜单更改时,我希望将JSON对象传递回服务器…但是现在我们只处理页面加载…函数还显示值或在动态表中选择的内容使用名为defaultTable()
的函数创建,暂时忽略这一点,这是我感兴趣的JSON对象的填充(并且存在问题)
var selectMenuArray=[“cat”、“catOpt”、“primary”、“tariffOpt”],//这些是选择菜单的ID。。。
selObj={};
功能设置表(selectArray,theObj){
//好的,如果我们进入页面,并且用户已经选择了tarif(因此它显示在菜单中),我们希望显示带有
//默认值/原始值。。。
var currentSelect,
catA=[],
catOptA=[],
塔拉=[],
跗骨=[],
catOptForObj,
Tarifforobj,
tariffOptForObj,
temp1={},
temp2={},
temp3={},
我
//循环浏览4个菜单,查看所选内容
对于(i=0;i 0||catOptA.length>0|tarA.length>0|tarOptA.length>0){
//显示表格。。。
$(“#dynamicTableHolder表”).css(“可见性”、“可见”).hide().fadeIn('slow');
对于(i=0;i您正在为parseJSON()提供一个类似于'“catOptions”:“{”a:“B”,“C:“D”,“}”的字符串。
parseJSON()需要类似以下内容的内容
'{“catOptions”:{“A”:“B”,“C”:“D”}'
如果您打算手工构建JSON,则需要处理一些问题
要修复错误,您不想将{key:value}
括在引号中,它们会被catOptForObj中的引号打断
如果OptForObj字符串可能包含双引号,则需要对其进行转义
您基本上是这样构建字符串的:
s = s + '"' + A '":"' + "B" + '",';
这将产生类似于“A”:“B”,“C”:“D”,“
逗号只应存在于值之间。一种方法是先检查s是否为空,然后在附加值之前将其附加到s。类似于:
s = (s.length?(s+','):'') + '"' + A + '":"' + "B" + '"';
最好的方法是使用注释中建议的内置函数JSON.stringify向正在使用字符串的JSON对象添加值
catOptForObj = catOptForObj + '"' + currentSelect.options[j].value + '":"' + "% to come later" + '",';
相反,您可以尝试以下约定为JSON中的不同键分配值
catOptForObj[currentSelect.options[j].value]=%to come later”
永远不要使用字符串函数构建JSON。在适当的对象上使用JSON.stringify()
。这是一个很好的建议……我会尝试一下,谢谢!还记得不要在JSON中添加实际注释,就好像它是JavaScript;JSON不允许这样做(除非您将它们作为对象的一部分包含在内)@MikeSav:转到并下载json2.js,并将其包含在您的head脚本中。用法是JSON.stringify()…进一步说明ThiefMaster所说的,而不是试图用字符串来构建它,您最好执行类似于var myObj={};myObj[“val1”]=currentSelect.options[1]的操作
——也就是说,从一开始就创建一个合适的对象。
catOptForObj = catOptForObj + '"' + currentSelect.options[j].value + '":"' + "% to come later" + '",';