से स्ट्रिंग का उपयोग करके मैं एक v8 खोल आधारित कंसोल बना रहा हूं, मैंने नमूना कोड लिया है जो v8 के साथ है और यह बहुत अच्छी तरह से काम कर रहा है, लेकिन मैं एक v8 :: ऑब्जेक्ट को स्ट्रिंग संस्करण में कनवर्ट करने का प्रयास कर रहा हूं इसके (जेसन) लेकिन इसे करने का कोई तरीका नहीं मिला। मैं इस के साथ एक फ़ाइल test.js बनाई खोल परv8 shell
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("");
}
:
यहाँ shell.cc अंदर मेरे नमूना कोड
var a = { name: 'John' };
test(a);
और मैं भीतर js को क्रियान्वित करने के बाद इस मिल खोल कंसोल:
[object Object]
It's an object
क्या मैं चाहता हूँ है:
{ "name": "John" }
अगर मैं करने के लिए जे एस कोड बदलने के लिए:
var a = { name: 'John'}
test(JSON.stringify(a));
यह बहुत अच्छी तरह से काम करता है, लेकिन मैं उपयोगकर्ता को पता है json में JavaScript वैरिएबल पार्स करने के लिए कैसे होने चाहते हैं, और मैं के लिए जाँच करना चाहते हैं न ऑब्जेक्ट पर प्रत्येक इनपुट और इसे मैन्युअल रूप से पार्स करें।
क्या सी में shell.cc कोड के अंदर एक ही निर्देश निष्पादित करने का कोई तरीका है?
v8::Handle<v8::String> temp = JSON.parse(arg[0]);
अद्यतन: की तरह कुछ JSON के
const char* toJson(const v8::Local<v8::Object>& obj) {
std::stringstream ss;
ss << "{";
v8::Local<v8::Array> propertyNames = obj->GetPropertyNames();
for (int x = 0; x < propertyNames->Length(); x++) {
if (x != 0) {
ss << ", ";
}
v8::String::Utf8Value name(propertyNames->Get(x));
ss << "\"" << ToCString(name) << "\":";
v8::Local<v8::Value> val = obj->GetInternalField(x);
if (val->IsObject()) {
ss << toJson(val->ToObject());
} else {
ss << "\"" << ToCString(v8::String::Utf8Value(val)) << "\"";
}
}
ss << "}";
const char* result = ss.str().c_str();
return result;
}
v8::Handle test(const v8::Arguments& args) {
v8::HandleScope handle_scope;
const char* json;
v8::String::Utf8Value strJson(args[0]);
if (args[0]->IsObject()) {
char* json = toJson(args[0]);
// ...
// Some operations with the json
// ...
}
return v8::String::New("");
}