1616#include < ydb/library/services/services.pb.h>
1717#include < yql/essentials/types/binary_json/read.h>
1818
19+ #include < library/cpp/json/json_reader.h>
1920#include < library/cpp/json/json_writer.h>
2021#include < library/cpp/protobuf/json/proto2json.h>
2122#include < library/cpp/protobuf/json/util.h>
@@ -48,6 +49,12 @@ EScanStatus ToScanStatus(EStatus status) {
4849 return EScanStatus::InProgress;
4950}
5051
52+ void WriteJson (TStringBuf in, NJsonWriter::TBuf& out) {
53+ NJson::TJsonValue value;
54+ Y_ENSURE (NJson::ReadJsonTree (in, &value));
55+ out.WriteJsonValue (&value);
56+ }
57+
5158void WriteColumnToJson (const TString& columnName, NScheme::TTypeId columnType,
5259 const TCell& columnData, NJsonWriter::TBuf& writer)
5360{
@@ -91,13 +98,13 @@ void WriteColumnToJson(const TString& columnName, NScheme::TTypeId columnType,
9198 writer.WriteKey (columnName).WriteFloat (columnData.AsValue <float >());
9299 break ;
93100 case NScheme::NTypeIds::Date:
94- writer.WriteKey (columnName).WriteULongLong ( columnData.AsValue <ui16>());
101+ writer.WriteKey (columnName).WriteString ( TInstant::Days ( columnData.AsValue <ui16>()). ToString ());
95102 break ;
96103 case NScheme::NTypeIds::Datetime:
97- writer.WriteKey (columnName).WriteULongLong ( columnData.AsValue <ui32>());
104+ writer.WriteKey (columnName).WriteString ( TInstant::Seconds ( columnData.AsValue <ui32>()). ToString ());
98105 break ;
99106 case NScheme::NTypeIds::Timestamp:
100- writer.WriteKey (columnName).WriteULongLong ( columnData.AsValue <ui64>());
107+ writer.WriteKey (columnName).WriteString ( TInstant::MicroSeconds ( columnData.AsValue <ui64>()). ToString ());
101108 break ;
102109 case NScheme::NTypeIds::Interval:
103110 writer.WriteKey (columnName).WriteLongLong (columnData.AsValue <i64 >());
@@ -111,11 +118,15 @@ void WriteColumnToJson(const TString& columnName, NScheme::TTypeId columnType,
111118 writer.WriteKey (columnName).WriteLongLong (columnData.AsValue <i64 >());
112119 break ;
113120 case NScheme::NTypeIds::Utf8:
114- case NScheme::NTypeIds::Json:
115121 writer.WriteKey (columnName).WriteString (columnData.AsBuf ());
116122 break ;
123+ case NScheme::NTypeIds::Json:
124+ writer.WriteKey (columnName);
125+ WriteJson (columnData.AsBuf (), writer);
126+ break ;
117127 case NScheme::NTypeIds::JsonDocument:
118- writer.WriteKey (columnName).WriteString (Base64Encode (NBinaryJson::SerializeToJson (columnData.AsBuf ())));
128+ writer.WriteKey (columnName);
129+ WriteJson (NBinaryJson::SerializeToJson (columnData.AsBuf ()), writer);
119130 break ;
120131 case NScheme::NTypeIds::PairUi64Ui64: {
121132 auto pair = columnData.AsValue <std::pair<ui64, ui64>>();
@@ -131,6 +142,7 @@ void WriteColumnToJson(const TString& columnName, NScheme::TTypeId columnType,
131142 writer.WriteKey (columnName).WriteString (actorId.ToString ());
132143 break ;
133144 }
145+ case NScheme::NTypeIds::String:
134146 default :
135147 writer.WriteKey (columnName).WriteString (Base64Encode (columnData.AsBuf ()));
136148 break ;
0 commit comments