node.js bağlamaları yazıyor ve v8 :: Object örneklerinden JSON dizesi oluşturmak istiyorum. Bunu C++ 'da yapmak istiyorum. Node.js zaten JSON.stringify
olduğundan, kullanmak istiyorum. Fakat C++ kodundan nasıl erişeceğimi bilmiyorum.node.js C++ bağlamalarından JSON.stringify öğesine erişme
9
A
cevap
5
Genel nesneye bir başvuru atmanız ve sonra stringify yöntemini almanız gerekir;
Local<Object> obj = ... // Thing to stringify
// Get the global object.
// Same as using 'global' in Node
Local<Object> global = Context::GetCurrent()->Global();
// Get JSON
// Same as using 'global.JSON'
Local<Object> JSON = Local<Object>::Cast(
global->Get(String::New("JSON")));
// Get stringify
// Same as using 'global.JSON.stringify'
Local<Function> stringify = Local<Function>::Cast(
JSON->Get(String::New("stringify")));
// Stringify the object
// Same as using 'global.JSON.stringify.apply(global.JSON, [ obj ])
Local<Value> args[] = { obj };
Local<String> result = Local<String>::Cast(stringify->Call(JSON, 1, args));
1
Düğüm API'lerinden bazıları OP'nin yayımlanmasından değiştirildi. Node.js sürüm 7.7.1'i varsayarsak, kod satırları boyunca bir şeye dönüşür;
std::string ToJson(v8::Local<v8::Value> obj)
{
if (obj.IsEmpty())
return std::string();
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope scope(isolate);
v8::Local<v8::Object> JSON = isolate->GetCurrentContext()->
Global()->Get(v8::String::NewFromUtf8(isolate, "JSON"))->ToObject();
v8::Local<v8::Function> stringify = JSON->Get(
v8::String::NewFromUtf8(isolate, "stringify")).As<v8::Function>();
v8::Local<v8::Value> args[] = { obj };
// to "pretty print" use the arguments below instead...
//v8::Local<v8::Value> args[] = { obj, v8::Null(isolate), v8::Integer::New(isolate, 2) };
v8::Local<v8::Value> const result = stringify->Call(JSON,
std::size(args), args);
v8::String::Utf8Value const json(result);
return std::string(*json);
}
Temel olarak, kod, motordan JSON
nesne alır nesnenin fonksiyonu stringify
bir başvuru elde eder ve sonra da çağırır. Kod javascript ile aynıdır;
var j = JSON.stringify(obj);
daha v8 bazlı alternatifler JSON
sınıfı kullanılarak bulunmaktadır.
auto str = v8::JSON::Stringify(v8::Isolate::GetCurrent()->GetCurrentContext(), obj).ToLocalChecked();
v8::String::Utf8Value json{ str };
return std::string(*json);
İlgili konular
- 1. Quantmod paketinden chart_Series() öğesine erişme
- 2. Bir projenin TargetDir öğesine WiX önişlemcisiyle erişme $ var sözdizimi
- 3. JSON.stringify (navigator)
- 4. Ana sayfa düğmesine Phonegap/iOS düğmesine basıldığında localStorage öğesine erişme
- 5. Birden çok anahtar arama dizesiyle python dict öğesine erişme
- 6. Döngü için django şablonunda önceki dizi öğesine erişme
- 7. Anonim bir Java alt sınıfından "this" öğesine erişme
- 8. Angular HTML Giriş öğesine, Angular 2.0 formControl kullanarak erişme
- 9. json.stringify nesne yöntemlerini işlemiyor
- 10. javascript json.stringify kaçmıyor mu?
- 11. IronPython'da C# sınıf üyelerine erişme
- 12. node.js kullanılarak mysql veritabanına erişme konusunda yardıma ihtiyacınız var
- 13. Firefox'ta JSON.stringify ve satır sonları
- 14. JSON.stringify() replaceer işlevi neden çalışmıyor?
- 15. JSON.stringify neden datetime nesneyi sıkıştırıyor?
- 16. Erişim Rhino'nun yerel JSON.Stringify - Java
- 17. Öğe başına öğe başına [] öğesine eşittir. C++
- 18. Java, C# 'ın Environment.GetCommandLineArgs() öğesine denk mi?
- 19. C# .Net adresinden Node.JS aranıyor
- 20. execl C++ node.js-addon kilitleniyor
- 21. C++: Başlık uygulama dosyasında sınıf özelliklerine erişme
- 22. Azınlık Depolama Tablolarına C++ kodundan erişme
- 23. C# Nesne özelliklerine erişme dizinleyici stili
- 24. C++ 'dan Android'e GPS üzerinden erişme
- 25. Başka bir dosyadan C++ extern "C" değişkenine erişme
- 26. Form değerlerine JavaScript ile erişme
- 27. JSON.stringify döner "[nesne nesne]" yerine nesne
- 28. JSON.stringify() Tarih nesneleri neden kabul ediyor?
- 29. Neden JSON.stringify görüntüleme nesnesi özellikleri işlevlerini?
- 30. JSON.stringify Nakavt JS değişkenlere sahip bir nesne
Bazı şeyler görünüşte V8 API değişti: 1. hayır 'GetCurrent' yoktur ve genellikle kullandığınız izolattan küresel olsun' izolat-> GetCurrentContext() -> Genel() '. 2. 'String :: New()' dır ve genellikle 'String :: NewFromUTF8()' olmasını istersiniz. Bunun başka bir cevabı haklı çıkardığını düşünmeyin, ancak sizinkini güncelleştirirseniz arayabiliriz. – Stav