有人能告诉我使用"Object Literal Notation"和JSON对象定义的JavaScript对象之间的主要区别是什么?
根据一本JavaScript书,它说这是一个使用Object Notation定义的对象:
var anObject = {
property1 : true,
showMessage : function (msg) { alert(msg) }
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,为什么它不是JSON对象?仅仅因为它没有使用引号定义?
这是我的字符串
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
Run Code Online (Sandbox Code Playgroud)
这里的消息包含单引号,与JSON中使用的引用相同.我所做的是填写用户输入的字符串,如消息.所以,我需要摆脱那些破坏代码的特殊场景.但除了字符串替换之外,是否有任何方法可以使它们转义但仍允许HTML将它们处理回正确的消息?
我有一个原始字符串.我只是想验证字符串是否是有效的JSON.我正在使用JSON.NET.
JSON规范说JSON是一个对象或数组.在物体的情况下,
对象结构表示为围绕零个或多个名称/值对(或成员)的一对花括号. 名称是一个字符串. ...
后来,规范说一个字符串被引号括起来.
为什么?
从而,
{"Property1":"Value1","Property2":18}
Run Code Online (Sandbox Code Playgroud)
并不是
{Property1:"Value1",Property2:18}
Run Code Online (Sandbox Code Playgroud)
问题1:为什么不允许名称/值对中的名称是不带引号的标识符?
问题2:在Javascript中评估时,上述两种表示之间是否存在语义差异?
根据Crockford的json.org,JSON 对象由成员组成,成员由成对组成.
每对由字符串和值组成,字符串定义为:
字符串是零个或多个Unicode字符的序列,用双引号括起来,使用反斜杠转义.字符表示为单个字符串.字符串非常类似于C或Java字符串.
但实际上大多数程序员甚至不知道JSON键应该用双引号括起来,因为大多数浏览器不需要使用双引号.
用双引号打扰你的JSON是否有意义?
有效示例:
{
"keyName" : 34
}
Run Code Online (Sandbox Code Playgroud)
与无效相反:
{
keyName : 34
}
Run Code Online (Sandbox Code Playgroud) 我在疯狂尝试解析Play Framework 2.2中的这个JSON结构:
val jsonStr = """{ personFirstName: "FirstName",
personLastName: "LastName"
positionLat: null,
positionLon: null }"""
Run Code Online (Sandbox Code Playgroud)
我有2个案例类:
case class Position( val lat: Double, val lon: Double)
case class Person( firstName: String, lastName: String, p: Option[Position] )
Run Code Online (Sandbox Code Playgroud)
如您所见,在Person案例类中,Position不是强制性的.
我试图用这样的东西得到一个Person的实例
implicit val reader = (
(__ \ 'personFirstName ).read[String] ~
(__ \ 'personLastName ).read[String] ~
( (__ \ 'positionLat ).read[Double] ~
(__ \ 'positionLon ).read[Double] )(Position)
)(Person)
Run Code Online (Sandbox Code Playgroud)
但我很快意识到我不知道如何处理该Option[Position]对象:Some(Position(lat,lon))如果指定'lat'和'lon'并且不是null,则意图是实例化,否则实例化None.
你会怎么处理?
对所有人来说
我试图用jQuery的$ .getJSON()从Google检索汇率.使用请求:" $.getJSON()"
返回一个简单的JSON文件: "http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"
我使用以下jquery函数来获得加元金额:
{
lhs: "1 U.S. dollar",
rhs: "1.03800015 Canadian dollars",
error: "",
icc: true
}
Run Code Online (Sandbox Code Playgroud)
Fire bug显示正确的JSON文件,但表明使用了无效的标签.
任何帮助表示赞赏.
短发
我正在使用GSON来验证JSON格式的字符串:
String json="{'hashkey':{'calculatedHMAC':'f7b5addd27a221b216068cddb9abf1f06b3c0e1c','secretkey':'12345'},operation':'read','attributes':['name','id'],'otid':'12'}";
Gson gson=new Gson();
Response resp = new Response();
RequestParameters para = null;
try{
para = gson.fromJson(json, RequestParameters.class);
}catch(Exception e){
System.out.println("invalid json format");
}
Run Code Online (Sandbox Code Playgroud)
它做得很好但是当我删除下面的引号时,我已经从hashkey中删除了:
"{hashkey':{'calculatedHMAC':'f7b5addd27a221b216068cddb9abf1f06b3c0e1c','secretkey':'12345'},operation':'read','attributes':['name','id'],'otid':'12'}"
Run Code Online (Sandbox Code Playgroud)
它仍然将它验证为正确的JSON格式,并且不会抛出任何异常而不会进入catch体.这样做的原因是什么?我该如何解决这个问题?
RequestParameters类:
public class RequestParameters {
HashKey hashkey;
String operation;
int count;
int otid;
String[] attributes;
}
Run Code Online (Sandbox Code Playgroud) 它似乎是JSON最保守的秘密之一:你究竟能在字符串周围省略引号 - 你还应该使用什么引号(单引号或双引号)?
该JSON标准是非常清楚的:使用双引号,并且始终使用它们.然而似乎没有人遵循这一点,解析器看起来一般都很好.
例如,JSON文档中的键通常似乎不需要引号.(我猜这是因为解析器可以假设密钥必须是字符串文字).但这是一个实际的规则吗?还有其他这样的规则吗?它们是特定于解析器还是特定于语言?
请注意,虽然问题是关于JSON,但这包括在给定编程语言中表达JSON对象的标准方法.如果某种语言(例如JavaScript)具有偏离JSON标准的官方规则,那么查看它们的定义会很有帮助.
<script>
(function() {
$('html').addClass('js');
var contactForm = {
container: $('#contact'), <-- THIS COMMA
init: function() {
$('<button></button>', {
text: 'Contact Me'
})
.insertAfter('article:first')
.on('click', this.show);
}, <---------------------------------- AND THIS COMMA
show: function() {
contactForm.container.show();
}
};
contactForm.init();
})();
</script>
Run Code Online (Sandbox Code Playgroud)
在上面的脚本中,我注意到:
container: $('#contact'),
这是一种声明变量的方法吗?执行以下操作会破坏脚本:
var container = $('#contact');
另外,init函数和容器变量之后的逗号是什么(如果它是变量)?