如何在 JavaScript 中将字符串转换为 JSON?

Posted

技术标签:

【中文标题】如何在 JavaScript 中将字符串转换为 JSON?【英文标题】:How to convert string to JSON in JavaScript? 【发布时间】:2016-05-03 07:09:20 【问题描述】:

我使用 Django 框架来实现一个 Web 项目。我从 MongoDB 数据库中获取一组数据对象并将它们设置为组合框。我有两个组合框,更改第一个中的值会更改第二个中的值。

这是我的视图 html 文件代码。

 <div class="form-group">
            <div class="form-controls">
              <label>By Product Code  </label>
               <select name="productCode" id="onecb">
                   <option></option>
                 % for entry in product_code %
                       <option value=" entry.code "> entry.product_name </option>
                  % endfor %

             </select>
            </div>
         </div>

         <!--<div class="form-group">
            <label>By Product Code </label>
            <input  type="number" class="form-control" placeholder="Enter Product Code" name="productCode" maxlength="5" max="1000">
         </div> -->

         <div class="form-group">
            <div class="form-controls">
              <label>By Batch Code   </label>
               <select name="batchCode" id="twocb">
                 <option></option>
                 % for entry in batch %
                       <option value=" entry "> entry.batch_code </option>
                  % endfor %
             </select>
            </div>
         </div>

这是我的 javascript 代码。

<script>
    var first = document.getElementById('onecb'), second = document.getElementById('twocb');



    var ddlArray= new Array();
    for(i = 0; i < second.options.length; i++) 
        ddlArray[i] = second.options[i].value;

        //var obj = JSON.parse(ddlArray[i]);
        console.log(ddlArray[i]);
    


   first.onchange = function (e) 
       var val = e.target.value;
       empty(second);

       for (i = 0; i < ddlArray.length; i++) 
           //if(ddlArray[i] == val)
                addOption(ddlArray[i], second);
           ///


       
   ;

    function empty(select) 
      select.innerHTML = '';
    

    function addOption(val, select) 
      var option = document.createElement('option');
      option.value = val;
      option.innerHTML = val;
      select.appendChild(option);
    


</script>

控制台输出:

'batch_code': 'B001', 'created_date': datetime.datetime(2016, 1, 16, 12, 57, 11, 394000), '_id': ObjectId('569a3e27f125be38311fe15a'), 'key_quntity': 12, 'product_code': 0
'batch_code': 'B002', 'created_date': datetime.datetime(2016, 1, 16, 12, 58, 21, 183000), '_id': ObjectId('569a3e6df125be38311fe167'), 'key_quntity': 21, 'product_code': 2

但是当我取消注释这一行时

//var obj = JSON.parse(ddlArray[i]);

它给出了这个错误

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

----------------我想做什么-------------- -------

我希望当我从第一个组合框中选择产品代码时,仅将相关的批次代码加载到第二个组合框。

例如:我在第一个组合框中选择产品代码二(2),然后将“B002”加载到第二个组合框中。

------------------编辑后-------------- --------------

根据回复,我只得到这样的产品 id 和批处理代码:

'product_code': 0, 'batch_code': 'B001' 
'product_code': 2, 'batch_code': 'B002' 
'product_code': 1, 'batch_code': 'B089'

但我仍然遇到同样的错误。

【问题讨论】:

这不是有效的 JSON。 @Pointy,我从 mongoDB 数据库中获取数据,我想迭代这个对象并分别获取“产品代码”和“批处理代码”。 通过调用各自的 toString() 方法使 ObjectId 和 datetime 成为一个字符串。 我改变 ''product_code': 0, 'batch_code': 'B001' 'product_code': 2, 'batch_code': 'B002' 'product_code': 1, 'batch_code ': 'B089' '但还是同样的错误。 【参考方案1】:

我认为你可以使用 RegExp 进行解析

var str = "'batch_code': 'ikk', 'created_date': datetime.datetime(2016, 1, 16, 12, 57, 11, 394000), '_id': ObjectId('569a3e27f125be38311fe15a'),     'key_quntity': 12, 'product_code': 0";
var reg1 = /(?:\'product_code\'\:)\s+(\w+)/;
var reg2 = /(?:\'batch_code\'\:\s+\')(\w+)/;
var product_code = reg1.exec(str)[1];//ikk
var batch_code = reg2.exec(str)[1];  //0

【讨论】:

@Stanisalv 谢谢。我只想拿 B001 和 0 。我不想使用 batch_code 和 product_code 字。 PLZ,期待一些答案。 ,对不起,当执行这个 sting 时,'batch_code': 'ikk', 'product_code': 3 ,传递这个错误,TypeError: reg2.exec(...) is null ,你能帮我。 ? @谢谢你,先生,现在一切正常。【参考方案2】:

简短回答:对于 Javascript,单引号和双引号都对引用字符串有效。例如:“name”和“name”都有效; 然而,对于 JSON,只有双引号是有效的。例如。 “名称”有效。 “名称”无效。所以:

JSON.parse('product_code': 0, 'batch_code': 'B001')

会失败:因为 'product_code': 0, 'batch_code': 'B001' 不是字符串;

JSON.parse("'product_code': 0, 'batch_code': 'B001'")

它也会失败,因为属性名称是单引号(不是 JSON 标准)

JSON.parse("\"product_code\": 0, \"batch_code\": \"B001\"")

会有用的

JSON.parse('"product_code": 0, "batch_code": "B001"')

另外,它也可以工作。

【讨论】:

以上是关于如何在 JavaScript 中将字符串转换为 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 如何在Javascript中将字符串转换为数字?

如何在Javascript中将字符串转换为对象? [复制]

如何在 JavaScript 中将字符串转换为布尔值?

如何在Javascript中将字符串转换为json

如何在 JavaScript 中将驼峰式字符串转换为破折号?

如何在 JavaScript 中将字符串转换为浮点数?