0

不太熟悉 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而不是内部键,Center并且Left

这样我就可以针对键迭代每个值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. 根据从步骤 2 中检索到的值创建数组(基于“,”分割)。
  4. 循环通过从步骤 3 获得的值并执行逻辑。

我真正的挑战是在第 2 步和第 3 步,我需要获取密钥及其关联值以及那些未预定义的密钥,因此我无法根据那里的名称访问它们。

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

4

4 回答 4

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;
  }
于 2012-09-18T10:08:45.010 回答
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();
于 2012-09-18T10:06:35.523 回答
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,"
}

usingJSON.stringify()是将 javascript 对象转换为 JSON 字符串格式的正确方法。但是,如果要将其放入变量中,则应首先执行此操作,然后在最后一步中将其转换为 JSON 字符串。

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

编辑:

您需要先处理数据,如果我理解正确,您可能甚至不需要 JSON 字符串。(=> 但是,如果您已经得到了一个字符串,则需要先对其进行解析。使用JSON.parse(yourjsonstring))

  1. 获取外键(必需或也可以有其他)。
  2. 获取键 Center 和 Left 下的所有值
  3. 根据从步骤 2 中检索到的值创建数组(基于“,”分割)。
  4. 循环通过从步骤 3 获得的值并执行逻辑。

将此作为变量:

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]);
}

这是一个小提琴=> 使用 Chrome/safari/Opera 的开发工具并检查控制台以检查输出。或使用 firebug(在 firefox 中)或 IE9 或更高版本 (F12)。

于 2012-09-18T09:57:59.480 回答
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,您唯一需要担心它不是内置的。但是,在这种情况下,您可以加载类似这样的 polyfill 库,它将为您实现上述语法。

于 2012-09-18T09:58:08.333 回答