【问题标题】:Javascript JSON stringify No Numeric Index to include in DataJavascript JSON stringify 没有要包含在数据中的数字索引
【发布时间】:2020-09-16 01:34:57
【问题描述】:

我正在尝试通过 JSON 传递非数字索引值,但没有获取数据。

var ConditionArray = new Array();
ConditionArray[0] = "1";
ConditionArray[1] = "2";
ConditionArray[2] = "3";

ConditionArray['module'] = "Test";
ConditionArray['table']  = "tab_test";
var Data = JSON.stringify(ConditionArray);

当我提醒数据变量时,它具有值 1,2 和 3,但不包括模块和表格。如何添加这个以便传递整个字符串。

编辑:如果我还包含一些多维元素,例如

  ConditionArray[0] = new Array();
  ConditionArray[0] = "11";

【问题讨论】:

  • 预期输出是什么......? [1, 2, 4, "module":"Test", "table":"tab_test"]?那是无效的 JS。
  • 根据 Rob W 的评论,JSON 是基于 javascript 对象文字表示法。没有用于添加非索引属性的数组文字的表示法。

标签: javascript arrays json


【解决方案1】:

JSON 结构仅识别 Array 的数字属性。其他任何内容都将被忽略。

如果你想混合它们,你需要一个 Object 结构。

var ConditionArray = new Object();

【讨论】:

    【解决方案2】:

    这将是一个更好的方法:

    var values = {
        array : ["1", "2", "3"],
        module : "Test",
        table : "tab_test"
    };
    var data = JSON.stringify(values);
    

    【讨论】:

      【解决方案3】:

      因为 javascript 数组只接受数字索引。如果您想要非数字索引,请改用 Object。

      var ConditionArray = {};
      ConditionArray[0] = "1";
      ConditionArray[1] = "2";
      ConditionArray[2] = "3";
      
      ConditionArray['module'] = "Test";
      ConditionArray['table']  = "tab_test";
      var Data = JSON.stringify(ConditionArray);
      

      这是工作演示:http://jsfiddle.net/cUhha/

      【讨论】:

        【解决方案4】:

        根据JSON.stringfy 的算法(步骤 4b),只有数组的(数字)索引被字符串化。

        【讨论】:

          【解决方案5】:

          这是因为 Array 不包含您的元素。

          当你这样做时:

          ConditionArray['module'] = "Test";
          

          您实际上向ConditionArray 添加了一个属性,而不是元素。而JSON.stringify 仅转换为字符串ConditionArray 的元素。例如:

          var arr = new Array;
          arr['str'] = 'string';
          console.log(arr.length) //outputs 0
          

          您需要使用Object 而不是Array

          【讨论】:

            【解决方案6】:

            如果你把第一行改成

            var ConditionArray = new Object();
            

            你会达到预期的结果。

            【讨论】:

              【解决方案7】:

              如果由于某种原因您无法将数组转换为对象,例如您正在处理一个大型框架或不想接触的遗留代码,并且您的工作只是添加需要使用 JSON API 的 som 功能,您应该考虑使用 API 的 JSON.stringify(json,function(k,v){}) 版本。 在函数中,您现在可以决定如何处理特定类型的键值。

              【讨论】:

                【解决方案8】:

                这就是我解决这个问题的方法 其中 tblItemsTypeform 是数组,而排列是数组的索引 :

                let itemsData = [];
                   
                
                    for(var i = 0; i <= this.tblItemsTypeform.length -1;i++){
                        let itemsForms = {
                            arrange: i,
                            values: this.tblItemsTypeform[i]
                        }
                        itemsData.push(itemsForms)
                    }
                

                最后在一个变量中使用这个来发送到 api:

                var data = JSON.stringify(itemsData)
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-03-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-02-01
                  相关资源
                  最近更新 更多