mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-07 17:48:29 +08:00
Add array_at method to get array from JSON (#24671)
Signed-off-by: yah01 <yang.cen@zilliz.com>
This commit is contained in:
parent
c9d9940918
commit
f40e22c78c
@ -29,8 +29,11 @@
|
|||||||
#include "simdjson.h"
|
#include "simdjson.h"
|
||||||
#include "fmt/core.h"
|
#include "fmt/core.h"
|
||||||
#include "simdjson/common_defs.h"
|
#include "simdjson/common_defs.h"
|
||||||
|
#include "simdjson/dom/array.h"
|
||||||
|
#include "simdjson/dom/document.h"
|
||||||
#include "simdjson/dom/element.h"
|
#include "simdjson/dom/element.h"
|
||||||
#include "simdjson/error.h"
|
#include "simdjson/error.h"
|
||||||
|
#include "simdjson/padded_string.h"
|
||||||
|
|
||||||
namespace milvus {
|
namespace milvus {
|
||||||
using document = simdjson::ondemand::document;
|
using document = simdjson::ondemand::document;
|
||||||
@ -108,6 +111,20 @@ class Json {
|
|||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value_result<simdjson::dom::element>
|
||||||
|
dom_doc() const {
|
||||||
|
thread_local simdjson::dom::parser parser;
|
||||||
|
|
||||||
|
// it's always safe to add the padding,
|
||||||
|
// as we have allocated the memory with this padding
|
||||||
|
auto doc = parser.parse(data_);
|
||||||
|
AssertInfo(doc.error() == simdjson::SUCCESS,
|
||||||
|
fmt::format("failed to parse the json {}: {}",
|
||||||
|
data_,
|
||||||
|
simdjson::error_message(doc.error())));
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
exist(std::string_view pointer) const {
|
exist(std::string_view pointer) const {
|
||||||
return doc().at_pointer(pointer).error() == simdjson::SUCCESS;
|
return doc().at_pointer(pointer).error() == simdjson::SUCCESS;
|
||||||
@ -130,6 +147,15 @@ class Json {
|
|||||||
return doc().at_pointer(pointer).get<T>();
|
return doc().at_pointer(pointer).get<T>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get dom array by JSON pointer,
|
||||||
|
// call `size()` to get array size,
|
||||||
|
// call `at()` to get array element by index,
|
||||||
|
// iterate through array elements by iterator.
|
||||||
|
value_result<simdjson::dom::array>
|
||||||
|
array_at(std::string_view pointer) const {
|
||||||
|
return dom_doc().at_pointer(pointer).get_array();
|
||||||
|
}
|
||||||
|
|
||||||
std::string_view
|
std::string_view
|
||||||
data() const {
|
data() const {
|
||||||
return data_;
|
return data_;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user