JSON数组未按预期进行解析

时间:2017-09-12 09:14:37

标签: javascript json ejs

我的数据结构如下..

[{"type" : "text", "label" : "Some Label"},{"type" : "Other type", "label": "Other label"}],[{"type" : "text", "label" : "Some Label"},{"type" : "Other type", "label": "Other label"}]

我使用

从数据标签中检索此数据
var formData = $(document.getElementById('form-render-data')).data('form');

我无法迭代每个数组并访问其中的每个对象。我尝试使用around []进行解析和字符串化,但它没有任何区别。

通过使用索引循环只打印字符串中的每个字符。我没有在将它放入数据标签之前对其进行字符串化。

更新 由于对我一直试图实现的目标感到困惑,我将尽力解释整个过程。

使用Formbuilder.io构建表单。然后,我从表单中导出JSON数据,并使用Sails JS框架将它们存储在MYSQL数据库中。但是,有可能为一个会话创建多个表单,因此需要多个数组。然后我在请求中返回JSON,没有任何Stringifying或Parsing。

我已经尝试将JSON包装在方括号中,但我仍然没有运气。

2 个答案:

答案 0 :(得分:1)

如果您修复JSON

,您的代码就可以运行



var formData = $('#form-render-data').data('form');
console.log(formData)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div id="form-render-data" data-form='[{"type" : "text", "label" : "Some Label"},{"type" : "Other type", "label": "Other label"},
{"type" : "text", "label" : "Some Label"},{"type" : "Other type", "label": "Other label"}]'>Data</div>
&#13;
&#13;
&#13;

如果没有,你不能解析.data,但需要attr(&#34;数据形式&#34;)和分裂

&#13;
&#13;
var formData = $('#form-render-data').attr('data-form');
console.log(JSON.parse(formData.split('],[').join(",")))
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div id="form-render-data" data-form='[{"type" : "text", "label" : "Some Label"},{"type" : "Other type", "label": "Other label"}],[{"type" : "text", "label" : "Some Label"},{"type" : "Other type", "label": "Other label"}]'>Data</div>
&#13;
&#13;
&#13;

或换行

&#13;
&#13;
var formData = $('#form-render-data').attr('data-form');
console.log(JSON.parse("["+formData+"]"))
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div id="form-render-data" data-form='[{"type" : "text", "label" : "Some Label"},{"type" : "Other type", "label": "Other label"}],[{"type" : "text", "label" : "Some Label"},{"type" : "Other type", "label": "Other label"}]'>Data</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您已在数组中嵌套JSON。所以,你必须这样对待它。

var formData = $('#form-render-data').data('form');

for(var i = 0; i < formData.length; i++) {
    console.log(formData[i].type);
    console.log(formData[i].label);
}

它将迭代您的数组,将对象属性记录到控制台。

像这样修复数组数据:

[
    {
        "type" : "text",
        "label" : "Some Label"
    },
    {
        "type" : "Other type",
        "label": "Other label"
    }
,
    {
        "type" : "text",
        "label" : "Some Label"
    },
    {
        "type" : "Other type",
        "label": "Other label"
    }
]