From dd2b3b22e7f0128404169bdb137f8fc59effa472 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Mon, 11 Dec 2023 21:38:23 +0800 Subject: [PATCH 1/2] improve json --- zeno/src/nodes/JsonProcess.cpp | 83 ++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/zeno/src/nodes/JsonProcess.cpp b/zeno/src/nodes/JsonProcess.cpp index 7ac4d6d56c..a5e1925648 100644 --- a/zeno/src/nodes/JsonProcess.cpp +++ b/zeno/src/nodes/JsonProcess.cpp @@ -6,6 +6,12 @@ #include #include "zeno/utils/fileio.h" #include "zeno/utils/string.h" +#include "zeno/types/ListObject.h" +#include "zeno/types/DictObject.h" +#include +#include +#include + using Json = nlohmann::json; namespace zeno { @@ -271,4 +277,81 @@ ZENDEFNODE(JsonData, { }, }); +struct JsonGetData : zeno::INode { + virtual void apply() override { + auto in_json = get_input("json"); + auto multi_path = get_input2("paths"); + std::istringstream iss(multi_path); + std::vector paths; + std::string line; + while (std::getline(iss, line)) { + line = zeno::trim_string(line); + if (line.size()) { + paths.push_back(line); + } + } + + auto dict = std::make_shared(); + for (auto &path: paths) { + auto json = std::make_shared(); + json->json = in_json->json; + auto strings = zeno::split_str(path, ':'); + auto type = strings[1]; + path = strings[0]; + auto names = split_str(path, '/'); + + for (auto & name : names) { + json->json = json->json[name]; + } + + if (type == "json") { + auto out_json = std::make_shared(); + out_json->json = json->json; + dict->lut[path] = out_json; + } + else if (type == "int") { + dict->lut[path] = std::make_shared(int(json->json)); + } + else if (type == "float") { + dict->lut[path] = std::make_shared(float(json->json)); + } + else if (type == "string") { + dict->lut[path] = std::make_shared(std::string(json->json)); + } + else if (type == "vec2f") { + float x = float(json->json[0]); + float y = float(json->json[1]); + dict->lut[path] = std::make_shared(vec2f(x, y)); + } + else if (type == "vec3f") { + float x = float(json->json[0]); + float y = float(json->json[1]); + float z = float(json->json[2]); + dict->lut[path] = std::make_shared(vec3f(x, y, z)); + } + else if (type == "vec4f") { + float x = float(json->json[0]); + float y = float(json->json[1]); + float z = float(json->json[2]); + float w = float(json->json[3]); + dict->lut[path] = std::make_shared(vec4f(x, y, z, w)); + } + } + set_output("outs", dict); + } +}; +ZENDEFNODE(JsonGetData, { + { + {"json"}, + {"multiline_string", "paths"}, + }, + { + {"DictObject", "outs"} + }, + {}, + { + "json" + }, +}); + } \ No newline at end of file From cce6a9cb41151fdd12c1dd14f7e716987e667370 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Mon, 11 Dec 2023 21:41:06 +0800 Subject: [PATCH 2/2] improve --- zeno/src/nodes/JsonProcess.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/zeno/src/nodes/JsonProcess.cpp b/zeno/src/nodes/JsonProcess.cpp index a5e1925648..4c767ce99b 100644 --- a/zeno/src/nodes/JsonProcess.cpp +++ b/zeno/src/nodes/JsonProcess.cpp @@ -144,7 +144,7 @@ ZENDEFNODE(JsonGetChild, { }, {}, { - "json" + "deprecated" }, }); struct JsonGetInt : zeno::INode { @@ -162,7 +162,7 @@ ZENDEFNODE(JsonGetInt, { }, {}, { - "json" + "deprecated" }, }); @@ -181,7 +181,7 @@ ZENDEFNODE(JsonGetFloat, { }, {}, { - "json" + "deprecated" }, }); @@ -200,7 +200,7 @@ ZENDEFNODE(JsonGetString, { }, {}, { - "json" + "deprecated" }, }); struct JsonGetTypeName : zeno::INode { @@ -218,7 +218,7 @@ ZENDEFNODE(JsonGetTypeName, { }, {}, { - "json" + "deprecated" }, }); @@ -273,7 +273,7 @@ ZENDEFNODE(JsonData, { }, {}, { - "json" + "deprecated" }, });