3636#include " arrow/array/builder_time.h"
3737#include " arrow/extension_type.h"
3838#include " arrow/ipc/dictionary.h"
39+ #include " arrow/json/json_writer.h"
3940#include " arrow/record_batch.h"
4041#include " arrow/result.h"
4142#include " arrow/scalar.h"
@@ -64,6 +65,8 @@ using arrow::ipc::DictionaryFieldMapper;
6465using arrow::ipc::DictionaryMemo;
6566using arrow::ipc::internal::FieldPosition;
6667
68+ using JsonWriter = arrow::json::JsonWriter;
69+
6770namespace arrow ::internal::integration::json {
6871
6972namespace {
@@ -118,7 +121,7 @@ Result<std::string_view> GetStringView(const rj::Value& str) {
118121class SchemaWriter {
119122 public:
120123 explicit SchemaWriter (const Schema& schema, const DictionaryFieldMapper& mapper,
121- RjWriter * writer)
124+ JsonWriter * writer)
122125 : schema_(schema), mapper_(mapper), writer_(writer) {}
123126
124127 Status Write () {
@@ -460,7 +463,7 @@ class SchemaWriter {
460463 private:
461464 const Schema& schema_;
462465 const DictionaryFieldMapper& mapper_;
463- RjWriter * writer_;
466+ JsonWriter * writer_;
464467};
465468
466469Status SchemaWriter::VisitType (const DataType& type) {
@@ -469,7 +472,7 @@ Status SchemaWriter::VisitType(const DataType& type) {
469472
470473class ArrayWriter {
471474 public:
472- ArrayWriter (const std::string& name, const Array& array, RjWriter * writer)
475+ ArrayWriter (const std::string& name, const Array& array, JsonWriter * writer)
473476 : name_(name), array_(array), writer_(writer) {}
474477
475478 Status Write () { return VisitArray (name_, array_); }
@@ -493,7 +496,7 @@ class ArrayWriter {
493496 void WriteRawNumber (std::string_view v) {
494497 // Avoid RawNumber() as it misleadingly adds quotes
495498 // (see https://github.com/Tencent/rapidjson/pull/1155)
496- writer_->RawValue (v. data (), v. size (), rj:: kNumberType );
499+ writer_->RawValue (v);
497500 }
498501
499502 template <typename ArrayType, typename TypeClass = typename ArrayType::TypeClass,
@@ -598,7 +601,7 @@ class ArrayWriter {
598601 const Decimal32 value (arr.GetValue (i));
599602 writer_->String (value.ToIntegerString ());
600603 } else {
601- writer_->String (null_string, sizeof (null_string));
604+ writer_->String (std::string_view (null_string));
602605 }
603606 }
604607 }
@@ -610,7 +613,7 @@ class ArrayWriter {
610613 const Decimal64 value (arr.GetValue (i));
611614 writer_->String (value.ToIntegerString ());
612615 } else {
613- writer_->String (null_string, sizeof (null_string));
616+ writer_->String (std::string_view (null_string));
614617 }
615618 }
616619 }
@@ -622,7 +625,7 @@ class ArrayWriter {
622625 const Decimal128 value (arr.GetValue (i));
623626 writer_->String (value.ToIntegerString ());
624627 } else {
625- writer_->String (null_string, sizeof (null_string));
628+ writer_->String (std::string_view (null_string));
626629 }
627630 }
628631 }
@@ -634,7 +637,7 @@ class ArrayWriter {
634637 const Decimal256 value (arr.GetValue (i));
635638 writer_->String (value.ToIntegerString ());
636639 } else {
637- writer_->String (null_string, sizeof (null_string));
640+ writer_->String (std::string_view (null_string));
638641 }
639642 }
640643 }
@@ -863,7 +866,7 @@ class ArrayWriter {
863866 private:
864867 const std::string& name_;
865868 const Array& array_;
866- RjWriter * writer_;
869+ JsonWriter * writer_;
867870};
868871
869872Result<TimeUnit::type> GetUnitFromString (const std::string& unit_str) {
@@ -2035,13 +2038,13 @@ Result<std::shared_ptr<RecordBatch>> ReadRecordBatch(
20352038}
20362039
20372040Status WriteSchema (const Schema& schema, const DictionaryFieldMapper& mapper,
2038- RjWriter * json_writer) {
2041+ JsonWriter * json_writer) {
20392042 SchemaWriter converter (schema, mapper, json_writer);
20402043 return converter.Write ();
20412044}
20422045
20432046Status WriteDictionary (int64_t id, const std::shared_ptr<Array>& dictionary,
2044- RjWriter * writer) {
2047+ JsonWriter * writer) {
20452048 writer->StartObject ();
20462049 writer->Key (" id" );
20472050 writer->Int (static_cast <int32_t >(id));
@@ -2055,7 +2058,7 @@ Status WriteDictionary(int64_t id, const std::shared_ptr<Array>& dictionary,
20552058 return Status::OK ();
20562059}
20572060
2058- Status WriteRecordBatch (const RecordBatch& batch, RjWriter * writer) {
2061+ Status WriteRecordBatch (const RecordBatch& batch, JsonWriter * writer) {
20592062 writer->StartObject ();
20602063 writer->Key (" count" );
20612064 writer->Int (static_cast <int32_t >(batch.num_rows ()));
@@ -2076,7 +2079,7 @@ Status WriteRecordBatch(const RecordBatch& batch, RjWriter* writer) {
20762079 return Status::OK ();
20772080}
20782081
2079- Status WriteArray (const std::string& name, const Array& array, RjWriter * json_writer) {
2082+ Status WriteArray (const std::string& name, const Array& array, JsonWriter * json_writer) {
20802083 ArrayWriter converter (name, array, json_writer);
20812084 return converter.Write ();
20822085}
0 commit comments