Array of Array, JSON.stringify() giving empty array instead of entire object

后端 未结 4 1155
后悔当初
后悔当初 2020-12-17 02:26

Here\'s my array (from Chrome console):

\"array

Here\'s the pertinent part of code:

相关标签:
4条回答
  • 2020-12-17 02:45

    you can use

    const newMap = JSON.parse('{}');
    newMap[name] = value;
    

    and stingfy newMap. The result is pars as Map<string, string>

    0 讨论(0)
  • 2020-12-17 02:55

    Like all JavaScript objects, Arrays can have properties with string-based keys like the ones you're using. But only integer keys (or keys that can be cleanly converted to integers) are actually treated as elements of an Array. This is why JSON isn't catching your properties, and it's also why your Arrays are all reporting their length as zero.

    If you really need to use non-integer keys, you should be using plain Objects, not Arrays. This method has its own gotchas -for example, you need to be careful with for-in loops- but JSON will work the way you expect it to.

    var hours = {
        "Mon" : {
            "11h30" : "15h00",
            "18h30" : "21h30"
        }, 
        "Tue" : {},
        "Wed" : {
            "11h30" : "15h00",
            "18h30" : "21h30"
        }, 
        "Thu" : {},
        "Fri" : {},
        "Sat" : {},
        "Sun" : {
            "11h30" : "15h00",
            "18h30" : "21h30"
        }, 
    }
    
    0 讨论(0)
  • 2020-12-17 03:04

    In javascript arrays have indexes that are numeric keys. JSON.stringify assumes that an array have only properties which are numbers.

    You want to use an object, as what you have is not an array, but resembles a dictionary.

    Here is an example I made: http://jsfiddle.net/developerwithacaffeineproblem/pmxt8bwf/2/

    object = Object()
    object["age"] = 1
    object["cars"] = 2
    object["girlfriends"] = 3
    
    JSON.stringify(object)
    

    Results in:
    "{"age":1,"cars":2,"girlfriends":3}"

    Afterwards when you parse the data if you want to iterate it you can use a piece of code similiar to this:

    for (var key in yourobject) {
      if (yourobject.hasOwnProperty(key)) {
         console.log(key, yourobject[key]);
      }
    }
    
    0 讨论(0)
  • 2020-12-17 03:05

    Here is the minimal amount of javascript to reproduce the issue

    var test = [];
    test["11h30"] = "15h00"
    test["18h30"] = "21h30"
    console.log(test);    
    console.log(JSON.stringify(test)); // outputs []
    

    The issue with the above is that, while javascript will be happy to let you late-bind new properties onto Array, JSON.stringify() will only attempt to serialize the actual elements in the array.

    A minimal change to make the object an actual object, and JSON.stringify works as expected:

    var test = {}; // here is thre only change. new array ([]) becomes new object ({})
    test["11h30"] = "15h00"
    test["18h30"] = "21h30"
    console.log(test);
    console.log(JSON.stringify(test)); // outputs {"11h30":"15h00","18h30":"21h30"}
    
    0 讨论(0)
提交回复
热议问题