我正在创建一个基于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) 我为djondb创建了一个扩展,它是一个C++库的包装器,我编译了它,可以从djondb网站下载,我不是PHP专家,我一直遇到一些问题.发布,主要是我意识到我需要为每个平台做每个编译并为每个平台创建一个安装程序,这很费时,我想要的是分享源代码并允许用户以最简单的方式安装它,
我已经尝试过的:
所以我现在停留在1和2种分发方式,分发使用C++以用户友好的方式创建并易于安装的PHP扩展的最佳方式是什么?
提前感谢,如果您对项目的结构方式或phpize/configure/make过程的完整说明有更多疑问,可以在https://github.com/djondb/djondb_phpext查看项目代码.