【问题标题】:Valid JSON file format in jsjs中有效的JSON文件格式
【发布时间】:2016-10-06 00:39:59
【问题描述】:

我想控制给定数据是否为 ​​JSON 格式。 对于这个控件,我使用 JSON.parse 和 try catch。作为;

var str= {
  "employees":[
    {"firstName":"John", "lastName":"Doe"},
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
  ]
}
try {
  parsed = JSON.parse(str);
} catch (err) {
    return "It is not valid JSON file";
}

但我想扩展规则。 我想接受以下文件格式,其中字段不必写在 "" as;

{
 employees:[
  {firstName:"John", lastName:"Doe"},
  {firstName:"Anna", lastName:"Smith"},
  {firstName:"Peter", lastName:"Jones"}
 ]
}

我该怎么做? JSON.parse 不接受这种格式。

【问题讨论】:

  • 您可以使用eval(),但您必须考虑这种方法的安全隐患。
  • {"name": "alex" , "age": "33"} - 这不是 json,它是一个 javascript 对象。 Json 是一个字符串 - "{"name": "alex" , "age": "33"}"
  • 在你的情况下 str 已经是一个你不需要解析它的对象。
  • JSON.parse 不接受该格式,因为它无效。键必须用引号引起来
  • 是的。但我想使键不在引号中的文件格式可以接受。 @ammoQ 我如何使用 eval()?

标签: javascript json parsing


【解决方案1】:

JSON.parse 必须应用于 JSON 字符串,而不是 JSON 对象。

【讨论】:

    【解决方案2】:

    您可以尝试清理字符串并手动添加"

    var str = '{name: "alex" , age: "33"}';
    var d= '{employees:[{firstName:"John",lastName:"Doe"},{firstName:"Anna",lastName:"Smith"},{firstName:"Peter",lastName:"Jones"}]}';
    
    function processObject(str){
      var spaceReg = /\s/g;
      var _str = str.replace(spaceReg, "");
      
      var quoteReg = /\"/g;
      _str = _str.replace(quoteReg, "");
      
      var startBrace = /{/g;
      _str = _str.replace(startBrace,"{\"");
      
      var endBrace = /}/g;
      _str = _str.replace(endBrace,"\"}");
      
      var colon = /:/g
      _str = _str.replace(colon,"\":\"");
      
      var comma = /,/g
      _str = _str.replace(comma,"\",\"");
      
      var endBraceStr = /}\"/g
      _str = _str.replace(endBraceStr,"}");
      
      var startBraceStr = /\"{/g
      _str = _str.replace(startBraceStr,"{");
      
      var endBraceArrStr = /\]\"/g
      _str = _str.replace(endBraceArrStr,"]");
      
      var startBraceArrStr = /\"\[/g
      _str = _str.replace(startBraceArrStr,"[");
      
      console.log(_str)
      
      return JSON.parse(_str);
    }
    
    console.log(processObject(str))
    console.log(processObject(d))

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2017-11-18
      • 2015-06-16
      • 1970-01-01
      • 2019-06-09
      • 2018-08-11
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      相关资源
      最近更新 更多