2013-03-19 75 views
1

我刚刚安装了VS2012的JSLint扩展,并且我收到了一些我使用的JSON设置文件的异常。使用默认设置会导致我的构建被自动取消,所以我必须关闭取消构建的选项,因为JSLint错误。没有理由不承认JSON,因为它是有效的Javascript。我得到的例外说“预期:';'”。我检查了JSLint选项,并找不到解决此问题的选项,有谁知道一种方法?示例设置文件是:VS2012的JSLint扩展无法识别JSON

{ 
    "SharePath": "\\\\172.26.168.60\\main\\Temp\\Webclient", 
    "LocalFilePath": "C:\\\\Builds\\WebClient", 
    "BuildCount": "10", 
    "AppVersions": [ 
    { 
     "VersionName": "hotfix", 
     "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_hotfix" 
    }, 
    { 
     "VersionName": "main", 
     "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_main" 
    }, 
    { 
     "VersionName": "master", 
     "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_master" 
    } 
    ] 
} 

谢谢!

回答

1

根据所决定由伟大的道格拉斯Crockford的JSLint的的额外的严格的规定,所有的表情应该在结尾加上分号。 JSON对象的声明是一个表达式 - 在末尾添加一个分号,你应该是金色的。虽然JavaScript本身并不强迫你用分号结束每个表达式,但如果你不这样做,它会在一些奇怪的情况下导致编译问题,所以JSLint强迫你这样做。您应该认识到,通过使用JSLint,您同意使用更严格的JavaScript子集,然后根据规范指定的语言。但是,折衷的是,这个子集不太容易出错,因为这套完整的语言并因此更安全地使用。

{ 
    "SharePath": "\\\\172.26.168.60\\main\\Temp\\Webclient", 
    "LocalFilePath": "C:\\\\Builds\\WebClient", 
    "BuildCount": "10", 
    "AppVersions": [ 
    { 
     "VersionName": "hotfix", 
     "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_hotfix" 
    }, 
    { 
     "VersionName": "main", 
     "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_main" 
    }, 
    { 
     "VersionName": "master", 
     "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_master" 
    } 
    ] 
}; // <--- ';' HERE 

,网上的JSLint似乎这里传递对象,而VS2012的JSLint没有的原因是,在JSLint的在线是治疗对象为JSON对象,只检查对象的一部分。您正在使用的VS2012将JSON文件视为完整的JavaScript文件,并将该JSON对象视为更大JS表达式的一部分(因为所有JSON对象最终都必须),因此它正在检查更多事情,然后联机JSLint编辑器。 (这是检查表达式的语法,在线JSLint不是。简单地说,JSLint在线工具默认为一个简单模式,然后VS2012正在运行。我已经更新了答案,这将强制onlint JSLint运行完整JS表达检查。尝试粘贴到onlie工具这一点,看看会发生什么。(提示JSLint的心不是高兴)

var test2 = "Hey JSLint Im a JS file, not a JSON object danm it!"; 
{ 
    "SharePath" : "\\\\172.26.168.60\\main\\Temp\\Webclient", 
    "LocalFilePath" : "C:\\\\Builds\\WebClient", 
    "BuildCount" : "10", 
    "AppVersions" : [ 
     { 
      "VersionName": "hotfix", 
      "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_hotfix" 
     }, 
     { 
      "VersionName": "main", 
      "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_main" 
     }, 
     { 
      "VersionName": "master", 
      "BuildPath": "\\\\10.18.0.53\\Builds\\WebClient_master" 
     } 
    ] 
} 
+0

谢谢!扩展仍然不承认它,但是。另外,如果我贴JSON原样是进入JSLint.com它说它是完美的 – PlantationGator 2013-03-19 18:26:50

+0

更新我的答案,解释你为什么看到这个 – gbtimmon 2013-03-19 18:40:12

+0

再次感谢,这是有道理的我猜JSLint的制造商不喜欢JS文件的想法,其中包含只有一个独立的对象,这是我(AB)使用它。基本上我已经取代app.config机智h settings.js,因为创建自定义对象非常简单,并且如果来自JSON(但是这是另一个线程的主题),则可以进行解析。 – PlantationGator 2013-03-19 19:30:26