web-dev-qa-db-fra.com

Convertir un tableau javascript multidimensionnel en JSON?

Quel est le meilleur moyen de convertir un tableau javascript multidimensionnel en JSON?

40
Kris Jordan

La plupart des infrastructures JavaScript populaires incluent des fonctions utilitaires JSON. Par exemple, jQuery a une fonction qui appelle directement une URL et charge le résultat JSON sous forme d'objet: http://docs.jquery.com/Getjson

Cependant, vous pouvez obtenir un analyseur et une chaîne de caractères JSON open source sur le site Web json :

https://github.com/douglascrockford/JSON-js

Ensuite, incluez simplement le code et utilisez la méthode JSON.stringify () sur votre tableau.

28
Wookai

Le "meilleur" moyen a été fourni par les autres affiches. Si vous n'avez pas besoin de toutes les fonctionnalités de codage des bibliothèques référencées et que vous n'avez besoin que de coder des tableaux simples, essayez ceci:

<!DOCTYPE html>
<html>
<head>
<title>Simple functions for encoding Javascript arrays into JSON</title>
<script type="text/javascript">

window.onload = function() {
  var a = [
    [0, 1, '2', 3],
    ['0', '1', 2],
    [],
    ['mf', 'cb']
  ],
  b = [
    0, '1', '2', 3, 'woohoo!'
  ];
  alert(array2dToJson(a, 'a', '\n'));
  alert(array1dToJson(b, 'b'));
};

function array2dToJson(a, p, nl) {
  var i, j, s = '{"' + p + '":[';
  nl = nl || '';
  for (i = 0; i < a.length; ++i) {
    s += nl + array1dToJson(a[i]);
    if (i < a.length - 1) {
      s += ',';
    }
  }
  s += nl + ']}';
  return s;
}

function array1dToJson(a, p) {
  var i, s = '[';
  for (i = 0; i < a.length; ++i) {
    if (typeof a[i] == 'string') {
      s += '"' + a[i] + '"';
    }
    else { // assume number type
      s += a[i];
    }
    if (i < a.length - 1) {
      s += ',';
    }
  }
  s += ']';
  if (p) {
    return '{"' + p + '":' + s + '}';
  }
  return s;
}

</script>
</head>
<body>
</body>
</html>
14
Mike Foster

Je ne suis pas sûr de bien comprendre votre question, mais si vous essayez de convertir l’objet en chaîne JSON, vous voudrez probablement examiner le support JSON natif de tous les nouveaux navigateurs. Voici Resig's post dessus. Pour les navigateurs qui ne le prennent pas encore en charge, essayez la bibliothèque json2.js . JSON.stringify (obj) convertira votre objet en une chaîne de caractères JSON.

5
Jerry

Cela convertira toutes les combinaisons de tableaux dans les objets et vice versa, y compris les noms de fonction:

function isArray(a){var g=a.constructor.toString();
   if(g.match(/function Array()/)){return true;}else{return false;}
}
function objtostring(o){var a,k,f,freg=[],txt; if(typeof o!='object'){return false;}
   if(isArray(o)){a={'t1':'[','t2':']','isarray':true}
   }else         {a={'t1':'{','t2':'}','isarray':false}}; txt=a.t1;
   for(k in o){
           if(!a.isarray)txt+="'"+k+"':";
           if(typeof o[k]=='string'){txt+="'"+o[k]+"',";
           }else if(typeof o[k]=='number'||typeof o[k]=='boolean'){txt+=o[k]+",";
           }else if(typeof o[k]=='function'){f=o[k].toString();freg=f.match(/^function\s+(\w+)\s*\(/);
               if(freg){txt+=freg[1]+",";}else{txt+=f+",";};
           }else if(typeof o[k]=='object'){txt+=objtostring(o[k])+",";
           }
   }return txt.substr(0,txt.length-1)+a.t2;
}
1
denes borsos

utiliser ce code et développer très simple pour plus de deux tableau

function getJSON(arrayID,arrayText) {    
    var JSON = "[";
    //should arrayID length equal arrayText lenght and both against null
    if (arrayID != null && arrayText != null && arrayID.length == arrayText.length) {
        for (var i = 0; i < arrayID.length; i++) {
            JSON += "{";
            JSON += "text:'" + arrayText[i] + "',";
            JSON += "id:'" + arrayID[i] + "'";
            JSON += "},";
        }
    }
    JSON += "]"
    JSON = Function("return " + JSON + " ;");
    return JSON();
}

et 3 tableau

function getJSON(arrayID, arrayText, arrayNumber) {
    var JSON = "[";  
    if (arrayID != null && arrayText != null && arrayNumber!=null && Math.min(arrayNumber.length,arrayID.length)==arrayText.length) {
        for (var i = 0; i < arrayID.length; i++) {
            JSON += "{";
            JSON += "text:'" + arrayText[i] + "',";
            JSON += "id:'" + arrayID[i] + "',";
            JSON += "number:'" + arrayNumber[i] + "'";
            JSON += "},";
        }
    }
    JSON += "]"
    JSON = Function("return " + JSON + " ;");
    return JSON();
}
0
Behnam Mohammadi
var t = {}

for(var i=0;i<3;i++) {
    var _main = {};
    var _dis = {}
    var _check = {};

    _main["title"] = 'test';
    _main["category"] = 'testing';
    _dis[0] = '';
    _dis[1] = '';
    _dis[2] = '';
    _dis[3] = '';
    _check[0] = 'checked';
    _check[1] = 'checked';
    _check[2] = 'checked';
    _check[3] = 'checked';
    _main['values'] = _check;
    _main['disabled'] = _dis;
    t[i] = _main;
}

alert(JSON.stringify(t));

Essaye ça

0
puneet

Vous pouvez utiliser la fonction encoder de cette bibliothèque .

0
Kev

J'ai un peu modifié le code fourni précédemment ... car un JSON a ce format: [{"object":{"property_1":"value_1","property_2":"value_2"}}]

Donc, le code serait ...

<!DOCTYPE html>
<html>
<head>
    <title>Simple functions for encoding Javascript arrays into JSON</title>
    <script type="text/javascript">

    window.onload = function(){
      var a = [['property_1','value_1'],['property_2', 'value_2']];
      alert("Comienzo..., paso ////"+a+"\\\\\\ a formato JSON");
      var jsonSerialized = array2dToJson(a, 'object');
      alert(jsonSerialized);
    };

    // Estructura de JSON [{"object":{"property_1":"value_1","property_2":"value_2"}}]

    function array2dToJson(a, p, nl) {
      var i, j, s = '[{"' + p + '":{';
      nl = nl || '';
      for (i = 0; i < a.length; ++i) {
        s += nl + array1dToJson(a[i]);
        if (i < a.length - 1) {
          s += ',';
        }
      }
      s += nl + '}}]';
      return s;
    }

    function array1dToJson(a, p) {
      var i, s = '';
      for (i = 0; i < a.length; ++i) {
        if (typeof a[i] == 'string') {
          s += '"' + a[i] + '"';
        }
        else { // assume number type
          s += a[i];
        }
        if (i < a.length - 1) {
          s += ':';
        }
      }
      s += '';
      if (p) {
        return '{"' + p + '":' + s + '}';
      }
      return s;
    }

    </script>
</head>
<body>
    <h1>Convertir un Array a JSON...</h1>
</body>
</html>
0
Cris..