【发布时间】:2016-05-22 10:51:09
【问题描述】:
当我尝试解析 JSON 数组的字符串表示时,我遇到了一个非常奇怪的错误。
这是字符串:
[{"name":"param1","type":"text","label":"Param1","value":"Wowzers"},{"name":"param2","type":"text","label":"Param2","value":"Awesomesauce"}]
JSON 似乎没有错误或格式错误,但由于某种原因,当我在该字符串上调用 JSON.parse() 时。两个“值”属性都设置为“未定义”。
关于这一切的最奇怪的部分是,在另一个例子中,JSON 解析工作正常。这是另一个实例的字符串。
[{"name":"start","type":"date","label":"Start Date","value":"2016-02-11T05:00:00.000Z","format":"EEEE, MMMM dd yyyy, h:mm a"},{"name":"finish","type":"date","label":"End Date","value":"2016-02-13T05:00:00.000Z","format":"EEEE, MMMM dd yyyy, h:mm a"}]
使用此代码,我可以访问值,并且返回的对象数组具有等同于正确值的值属性。所以它解析正确。
因此,对于第一个字符串,值返回为未定义,但是当我尝试使用下面的代码访问该值时,它可以工作。我可以记录这些值,即使它们在技术上不存在于数组中。
for (var i = 0; i < $scope.templateParams.length; i++) {
var msg = $scope.templateParams[i];
$log.info(msg);
$log.info(msg.value);
}
这给出:
Object { name: "param1", type: "text", label: "Param1", value: "Wowzers" }
Wowzers
Object { name: "param2", type: "text", label: "Param2", value: "Awesomesauce" }
Awesomesauce
我真的对此一无所知,并且尝试了多种解决方法,但无法解决任何问题。将不胜感激。
更新:
【问题讨论】:
-
你在什么引擎上运行这个?节点 0.10 中的快速测试使两个值参数保持不变。在 Chrome 中也是如此。
-
你在哪里看到他们
undefined?您是如何尝试访问它们以获取undefined的?如果您的$log.info(msg.value);打印出正确的值,则意味着 JSON 和JSON.parse()没问题。 -
那么问题是什么...?也许为我们提供重现问题的完整代码。
-
在您将
value属性记录为具有正确值之后,可能会将其设置为undefined。您需要发布更多代码,显示您在 html 模板中引用value的位置以及您可能在做什么。 -
@BradHoffman 在我看来,在您登录后,它只是在更改
value的值。
标签: javascript arrays angularjs json parsing