JSON数据格式

时间:2012-09-18 09:51:43

标签: javascript jquery json

不熟悉JSON数据以及如何使用JavaScript创建它。这就是我正在尝试的 我创建了两个JS变量

var json={};
var json1={};

我有一些循环来迭代数据和循环,如

for(firstLoop){
   key=outerKey;
   for(innerLook){
   innerKey=innerkey;
     for(lastloop){
       jsonValues= create values in a java variable
     }
      json[innerKey]=jsonValues;
    }

    json1[outerKey]=JSON.stringify(json);
  }

这样做我得到以下输出

Required: "{"Center":"radio_Required_Center_0,radio_Required_Center_1,","Left":"radio_Required_Left_0,"}"

这不是一个有效的JSON格式。我的想法是创建一个外键说Required,而不是我的CenterLeft

中的内部词

这样我可以根据键Center迭代每个值(我可以根据'打破字符串)

我不知道如何创建正确的结构,我不想在服务器端这样做,这可以很容易地完成。 任何解决方案或提示都会有所帮助。

修改

var data= JSON.stringify(json1);

提供以下输出

{"Required":"{\"Center\":\"radio_Required_Center_0,radio_Required_Center_1,\",\"Left\":\"radio_Required_Left_0,\"}"} 

这是有效的JSON数据,现在我需要根据JSON中的数据执行一些代码,这是我的要求

  1. 获取外键(必需或其他也可以)。
  2. 获取密钥CenterLeft
  3. 下的所有值
  4. 从步骤2中检索到的值创建数组(基于“,”拆分)。
  5. 循环执行从步骤3获得的值并执行逻辑。
  6. 我真正的挑战是在第2步和第3步,我需要获取密钥及其相关值和那些密钥而不是预定义的,因此我无法根据名称访问它们。

    我正在考虑一种获取密钥及其值而无需对密钥名称进行硬编码并执行逻辑的方法。 是否有可能采用这种方法?

4 个答案:

答案 0 :(得分:0)

尝试jsonlint.com验证您的JSON

这是有效的:

{
    "Center": "radio_Required_Center_0,radio_Required_Center_1,",
    "Left": "radio_Required_Left_0,"
}

这也是有效的:

{
    "Required": {
        "Center": "radio_Required_Center_0,radio_Required_Center_1,",
        "Left": "radio_Required_Left_0,"
    }
}

这不是:

Required: {
    "Center": "radio_Required_Center_0,radio_Required_Center_1,",
    "Left": "radio_Required_Left_0,"
}

使用JSON.stringify()是将javascript对象转换为JSON字符串格式的正确方法。但是,如果你想把它放在一个变量中,你应该先做,然后在最后一步中转换为JSON字符串。

var output = { "Required": yourpreviousjsonvar },
    jsonString = JSON.strinify(output);

修改

如果我理解你,你需要首先处理数据,甚至可能不需要JSON字符串。 (=>如果你已经有了一个字符串,你需要先解析它。使用JSON.parse(yourjsonstring)进行处理)

  1. 获取外键(必需或其他也可以)。
  2. 获取键中心和左侧
  3. 下的所有值
  4. 从步骤2中检索到的值创建数组(基于“,”拆分)。
  5. 循环执行从步骤3获得的值并执行逻辑。
  6. 将此作为变量:

    var a = {
        "Required": {
            "Center": "radio_Required_Center_0,radio_Required_Center_1,",
            "Left": "radio_Required_Left_0,"
        }
    }
    // step 1
    console.log(a.Required);
    // step 2
    console.log(a.Required.Center);
    console.log(a.Required.Left);
    // step 3
    var center = a.Required.Center.split(',');
    var left = a.Required.Left.split(',');
    // step 4
    for(var i = 0; i<center.length; i++){
        console.log("doing somthing with", center[i]);
    }
    

    这是fiddle =&gt;使用Chrome / safari / Opera的developpertools并检查控制台以检查输出。或者使用firebug(在firefox中)或IE9或更高版本(F12)。

答案 1 :(得分:0)

如果您使用的是现代版本的Javascript,它内置了JSON函数。

var jsonString = JSON.stringify(jsobject);

...将JS对象转换为JSON字符串。

(见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify

var jsOject = JSON.parse(jsomString);

......转向另一个方向。

(见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/parse

您唯一需要担心的是,如果您使用的是旧版浏览器(例如旧版本的IE),则需要担心此问题。但是,在这种情况下,您可以加载像this one这样的polyfill库,它们将为您实现上述语法。

答案 2 :(得分:0)

使用原生Javascript toSource ...

var obj= new Object();
var obj1= new Object();

for(firstLoop){
   key=outerKey;
   for(innerLook){
   innerKey=innerkey;
     for(lastloop){
       jsonValues= create values in a java variable
     }
      obj.innerKey=jsonValues;
    }

    obj1.outerKey=obj;
  }

  json = obj.toSource();
  json1 = obj1.toSource();

答案 3 :(得分:0)

如果您只是尝试编写一个大的JSON对象,则在将其添加到另一个JSON对象之前不需要对其进行字符串化...因此,您可以JSON.stringify(json)执行json1[outerKey]=json而不是for(firstLoop){ key=outerKey; for(innerLook){ innerKey=innerkey; for(lastloop){ jsonValues= create values in a java variable } json[innerKey]=jsonValues; } json1[outerKey]=json; } }}

{{1}}