我正在使用JSON.stringify()html <input>s通过websocket发送,如下所示:
JSON.stringify({
numberValue: $('#numberValue').val()
})
Run Code Online (Sandbox Code Playgroud)
但它编码$('#numberValue').val()为String.
如何将其编码为Number?
为什么JSON.stringify()不显示prop2?
var newObj = {
prop1: true,
prop2: function(){
return "hello";
},
prop3: false
};
alert( JSON.stringify( newObj ) ); // prop2 appears to be missing
alert( newObj.prop2() ); // prop2 returns "hello"
for (var member in newObj) {
alert( member + "=" + newObj[member] ); // shows prop1, prop2, prop3
}
Run Code Online (Sandbox Code Playgroud)
JSFIDDLE:http: //jsfiddle.net/egret230/efGgT/
创建一个名为car的对象:
function car(temp){
this.brand=temp[0];
this.color=temp[1];
this.year=temp[2];
}
var temp = ['Skoda', 'Red', '2012'];
car = new car(temp);
Run Code Online (Sandbox Code Playgroud)
从localStorage读取后设置对象和字符串化:
localStorage.setItem('car',car);
car = localStorage.getItem('car');
car = JSON.stringify(car);
Run Code Online (Sandbox Code Playgroud)
stringify后的汽车-----------------> [object Object]在file:/// android_asset/www/...
Stringify对象和设置对象后面的localStorage:
localStorage.setItem('car',JSON.stringify(car));
car = localStorage.getItem('car');
stringify后的汽车----------------->"{\"品牌\":\"斯柯达\",\"颜色\":\"红色","年份\":\"2012 \"}"at file:/// android_asset/www/...
问题1:为什么它会使字符串化对象时的顺序有所不同?
问题2:为什么我不能像这样使用字符串化对象:
08-21 11:49:14.860: I/Web Console(9642): car after stringify-----------------> {"brand":"Skoda","color":"Red","year":"2012"}
Run Code Online (Sandbox Code Playgroud)
console.log("car.brand ----->"+ car.brand); car.name ----->未定义
我正在尝试JSON.stringify()以下键/值对,其中值是一个对象数组.
var string = JSON.stringify({onlineUsers : getUsersInRoom(users, room)});
Run Code Online (Sandbox Code Playgroud)
这是不正确的,并给出以下错误:
var string = JSON.stringify({onlineUsers:getUsersInRoom(users,room)});
Run Code Online (Sandbox Code Playgroud)^TypeError:将循环结构转换为JSON
这是方法:
function getUsersInRoom(users, room) {
var json = [];
for (var i = 0; i < users.length; i++) {
if (users[i].room === room) {
json.push(users[i]);
}
}
return json;
}
Run Code Online (Sandbox Code Playgroud)
添加users数据结构:
[
{
id:1,
username:"",
room:"room 1",
client: {
sessionId:1,
key:value
}
},
{
// etc
}
]
Run Code Online (Sandbox Code Playgroud)
添加了将用户添加到用户阵列的功能.
function addUser(client) {
clients.push(client);
var i = clients.indexOf(client);
if (i > -1) …Run Code Online (Sandbox Code Playgroud) 我正在通过执行以下操作来创建javascript对象:
function field(name,label){
this.name = name
this.label= label;
}
var a = new field("market","Mkt").
Run Code Online (Sandbox Code Playgroud)
然后我分配给另一个对象.
object.newField = a;
Run Code Online (Sandbox Code Playgroud)
第二种方法是直接创建新属性
object.2ndNewField = {
name: "market2",
label:"Mkt2"
}
Run Code Online (Sandbox Code Playgroud)
我尝试读取其他功能中的对象.但是,当我对对象进行字符串化时,它们表现不一样.我创建的两个属性之间有什么区别?
顺便问一下这个对象有什么区别吗?
object.2ndNewField = {
"name": "market2",
"label":"Mkt2
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个基于v8 shell的控制台,我采用了v8附带的示例代码并且它运行良好,但我正在尝试将v8 ::对象转换为它的字符串版本(json)但是没有找到一个这样做的方式.
这是我在shell.cc中的示例代码:
v8::Handle test(const v8::Arguments& args) {
v8::HandleScope handle_scope;
const char* json;
v8::String::Utf8Value strJson(args[0]);
printf(ToCString(json));
if (args[0]->IsObject()) {
printf("it's an object\n");
}
return v8::String::New("");
}
Run Code Online (Sandbox Code Playgroud)
在shell中我创建了一个文件test.js:
var a = { name: 'John' };
test(a);
Run Code Online (Sandbox Code Playgroud)
我在shell控制台中执行js后得到这个:
[object Object]
It's an object
Run Code Online (Sandbox Code Playgroud)
我想要的是:
{ "name": "John" }
Run Code Online (Sandbox Code Playgroud)
如果我将js代码更改为:
var a = { name: 'John'}
test(JSON.stringify(a));
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但我不希望用户必须知道如何将javascript变量解析为json,我不想检查对象的每个输入并手动解析它.
有没有办法在C中的shell.cc代码中执行相同的指令?就像是:
v8::Handle<v8::String> temp = JSON.parse(arg[0]);
Run Code Online (Sandbox Code Playgroud)
更新:我正在处理这个问题,但我想要一个更清洁的方法来做同样的事情:
const char* toJson(const v8::Local<v8::Object>& obj) {
std::stringstream ss;
ss << "{";
v8::Local<v8::Array> propertyNames = obj->GetPropertyNames();
for (int …Run Code Online (Sandbox Code Playgroud) 我在节点restful server中使用stringify来提供数据:
answer = JSON.stringify({activities: result}, null, '\t');
return answer
Run Code Online (Sandbox Code Playgroud)
其中result是一个js对象; 我收到了正确的输出:
{
"activities": [
{
"id": 1,
"title": aaa
},
{
"id": 2,
"title": bbb
}
]
}
Run Code Online (Sandbox Code Playgroud)
但现在我想在stringify函数的左边部分使用变量而不是固定字符串; 就像是:
var name = "activities";
answer = JSON.stringify({name: result}, null, '\t');
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为name成为字符串化对象中的固定字符串
当你用Chrome检查时,我正在创建一个看起来像这样的对象:

当我尝试使用JSON.stringify对此对象进行字符串化时,我得到以下结果:
{
"results" : [{
"ID" : 1,
"NAME" : "Admin"
}, {
"ID" : 2,
"NAME" : "Standarduser"
}, {
"ID" : 3,
"NAME" : "Consultant"
}, {
"ID" : 4,
"NAME" : "Leergruppe"
}
]
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,所有嵌套节点都缺失.我确信这是非常简单和无意识的,但此刻我根本找不到我的错误.非常感谢你的帮助!
编辑:JSFiddle如何创建JSON:http://jsfiddle.net/VJTaV/
我发现,如果您.toJSON()为对象定义函数,那么它将用于字符串化对象,而不是默认值。有没有办法忽略这个覆盖的函数并运行默认的 stringify 进程?
如何使用 GNU gfortran 对预处理器宏进行字符串化?我想将宏定义传递给 GNU gfortran,然后将其用作代码中的字符串。
实际上,我想这样做:
program test
implicit none
character (len=:), allocatable :: astring
astring = MYMACRO
write (*, *) astring
end program test
Run Code Online (Sandbox Code Playgroud)
然后构建:
gfortran -DMYMACRO=hello test.F90
Run Code Online (Sandbox Code Playgroud)
我尝试创建各种宏,例如:
#define STRINGIFY_(x) #x
#define STRINGIFY(x) STRINGIFY_(x)
...
astring = STRINGIFY(MYMACRO)
Run Code Online (Sandbox Code Playgroud)
但这不适用于 gfortran 预处理器。
我还尝试使用不同风格的宏:
#define STRINGIFY(x) "x"
...
astring = STRINGIFY(MYMACRO)
Run Code Online (Sandbox Code Playgroud)
但这只会创建一个包含文本“MYMACRO”的字符串。
然后我尝试将宏定义更改为:
-DMYMACRO=\"hello\"
Run Code Online (Sandbox Code Playgroud)
但这在构建过程中导致了无关的问题。
感谢您的帮助
stringify ×10
javascript ×9
json ×7
object ×5
arrays ×1
default ×1
fortran ×1
function ×1
gfortran ×1
html-input ×1
jquery ×1
node.js ×1
numbers ×1
overriding ×1
preprocessor ×1
v8 ×1