log*_*lic 5 javascript c++ json node.js node.js-nan
我有一个使用Nan用C++编写的Node.js插件.工作非常好.但是,我无法弄清楚如何让我的Node Javascript代码将任意数据对象(例如{attr1:42, attr2:'hi', attr3:[5,4,3,2,1]})传递给C++插件.
到目前为止,我通过调用JSON.stringify()我的数据对象然后在C++端解析字符串化的JSON来解决这个问题.
理想情况下,我想避免复制数据,只是获取对我可以访问的数据对象的引用,或者至少本地复制它并避免字符串化/解析...
任何帮助,将不胜感激!
您可以允许Node.js c ++插件采用任意类型的参数,但必须明确检查和处理类型.他是一个简单的示例函数,展示了如何执行此操作:
void args(const Nan::FunctionCallbackInfo<v8::Value>& info) {
int i = 0;
while (i < info.Length()) {
if (info[i]->IsBoolean()) {
printf("boolean = %s", info[i]->BooleanValue() ? "true" : "false");
} else if (info[i]->IsInt32()) {
printf("int32 = %ld", info[i]->IntegerValue());
} else if (info[i]->IsNumber()) {
printf("number = %f", info[i]->NumberValue());
} else if (info[i]->IsString()) {
printf("string = %s", *v8::String::Utf8Value(info[i]->ToString()));
} else if (info[i]->IsObject()) {
printf("[object]");
v8::Local<v8::Object> obj = info[i]->ToObject();
v8::Local<v8::Array> props = obj->GetPropertyNames();
for (unsigned int j = 0; j < props->Length(); j++) {
printf("%s: %s",
*v8::String::Utf8Value(props->Get(j)->ToString()),
*v8::String::Utf8Value(obj->Get(props->Get(j))->ToString())
);
}
} else if (info[i]->IsUndefined()) {
printf("[undefined]");
} else if (info[i]->IsNull()) {
printf("[null]");
}
i += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
为了实际解决处理可能包含具有任意数据的对象的任意参数的问题,我建议编写一个解析实际对象的函数,类似于我在此示例中解析函数参数的方式.请记住,如果您希望能够处理对象中的嵌套对象,则可能需要递归执行此操作.
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |