2012-08-02 111 views
3

我试图在特定格式JSON对象创建错误

{ "id": 12234 , "name": "Alex" , "gender": "Male"} 

// My code starts here 

var number = userid;   // alert(userid) is 12345 
var name= nameuser;   // alert(nameuser) is Alex 
var g= gender;     // alert(gender) is male 

var userObj = { "id": number , "name": name , "gender":g} 

我想`JSON.stringify(userObj)创建一个JSON对象; , 返回对象类型为

{"id":"12345" , "name":"Alex" , "gender":"Male"} 

但这不是我想要的,我想要的号码是12345,而不是“12345”。

还试图字符串化的对象内的字段,如

{ "id": number , "name":JSON.stringify(name) ,gender: JSON.stringify(g)} 

但是当我做我的alert(userObj)对象类型是Object object,这是不是服务器识别的格式。 我相信有一个解决方法,但我无法找出一个

+1

但它似乎工作正常http://jsfiddle.net/XyJRW/ – thecodeparadox 2012-08-02 18:23:05

+2

你可以复制你的确切代码?你提供的代码有语法错误,除非'Alex'和'male'是变量。 – travis 2012-08-02 18:23:22

+0

我只是写了这些作为表示,分配给这些值是变量(与这些值,使用警报(名称)等检查)。 – alex 2012-08-02 18:33:36

回答

2

JSON专门用于字符串。除JSON中的字符串,数组或其他JSON对象外,其他任何内容都是无效的。也就是说,一个“数字”是不允许的;它需要是一个字符串。无论你以后如何使用JSON,都需要能够将字符串更改为数字(如有必要)。 JavaScript通常在强制这些方面做得很好。

在服务器端,你可以做这样的事情

obj = json_decode(source) 
obj.id = (int)obj.id 
0

我认为您的解决方案将下降到你想用JSON做的,而不是你希望如何被格式化的。

如果你在其他JavaScript代码中使用它,那么JSON.parse方法将在另一方面处理大部分问题(自动类型转换处理其余部分)。

如果您在服务器端使用它,PHP或类似的应用程序将适当地解码对象。

如果它是服务器上更严格的语言,您只需记住哪些参数需要转换为布尔型或int/float。

0

您的问题的下面的代码是有效的JSON。

{ "id": 12234 , "name": "Alex" , "gender": "Male"} 

我猜你的问题是你的userid变量是一个字符串,而不是数字。如果是这样,尝试

var number = parseInt(userid, 10); 

(10个参数表明您使用的基地10个数字,而不是像二进制或十六进制)。

0

将对象类型存储为属性之一,并使用它来转换所需的方式。