aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/json/easy_parse/json_easy_parser.cpp
diff options
context:
space:
mode:
authorfinder <finder@yandex-team.ru>2022-02-10 16:49:24 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:49:24 +0300
commit2ab6bab688484680d3ebc5c4a7e9cd3ff04fda04 (patch)
tree5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/json/easy_parse/json_easy_parser.cpp
parentabbbaf4075fbaa0ff4ce9faa1188089466a21dbe (diff)
downloadydb-2ab6bab688484680d3ebc5c4a7e9cd3ff04fda04.tar.gz
Restoring authorship annotation for <finder@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/json/easy_parse/json_easy_parser.cpp')
-rw-r--r--library/cpp/json/easy_parse/json_easy_parser.cpp96
1 files changed, 48 insertions, 48 deletions
diff --git a/library/cpp/json/easy_parse/json_easy_parser.cpp b/library/cpp/json/easy_parse/json_easy_parser.cpp
index 95eb59c744..3c781f544b 100644
--- a/library/cpp/json/easy_parse/json_easy_parser.cpp
+++ b/library/cpp/json/easy_parse/json_easy_parser.cpp
@@ -1,14 +1,14 @@
-#include "json_easy_parser.h"
+#include "json_easy_parser.h"
#include <library/cpp/json/json_reader.h>
#include <util/string/cast.h>
-#include <util/string/split.h>
-#include <util/string/strip.h>
-
-namespace NJson {
+#include <util/string/split.h>
+#include <util/string/strip.h>
+
+namespace NJson {
static TString MAP_IDENTIFIER = "{}";
static TString ARRAY_IDENTIFIER = "[]";
static TString ANY_IDENTIFIER = "*";
-
+
static void ParsePath(TString path, TVector<TPathElem>* res) {
TVector<const char*> parts;
Split(path.begin(), '/', &parts);
@@ -26,24 +26,24 @@ namespace NJson {
arrayCounter = -1;
}
res->push_back(TPathElem(arrayCounter));
- }
- }
- }
- }
-
+ }
+ }
+ }
+ }
+
void TJsonParser::AddField(const TString& path, bool nonEmpty) {
Fields.emplace_back();
Fields.back().NonEmpty = nonEmpty;
ParsePath(path, &Fields.back().Path);
}
-
+
TString TJsonParser::ConvertToTabDelimited(const TString& json) const {
TStringInput in(json);
TStringStream out;
ConvertToTabDelimited(in, out);
return out.Str();
}
-
+
class TRewriteJsonImpl: public NJson::TJsonCallbacks {
const TJsonParser& Parent;
TVector<TString> FieldValues;
@@ -51,7 +51,7 @@ namespace NJson {
bool ShouldUpdateOnArrayChange;
int CurrentFieldIdx;
bool HasFormatError;
-
+
private:
static bool PathElementMatch(const TPathElem& templ, const TPathElem& real) {
if (templ.Type != real.Type)
@@ -62,31 +62,31 @@ namespace NJson {
return templ.Key == ANY_IDENTIFIER || templ.Key == real.Key;
return true;
}
-
+
bool CheckFilter(const TVector<TPathElem>& path) const {
if (Stack.size() < path.size())
- return false;
+ return false;
for (size_t n = 0; n < path.size(); ++n) {
if (!PathElementMatch(path[n], Stack[n]))
return false;
}
return true;
- }
-
+ }
+
void UpdateRule() {
for (size_t n = 0; n < Parent.Fields.size(); ++n) {
if (FieldValues[n].empty() && CheckFilter(Parent.Fields[n].Path)) {
CurrentFieldIdx = n;
return;
}
- }
+ }
CurrentFieldIdx = -1;
- }
-
+ }
+
void Pop() {
Stack.pop_back();
}
-
+
void IncreaseArrayCounter() {
if (!Stack.empty() && Stack.back().Type == NImpl::ARRAY) {
++Stack.back().ArrayCounter;
@@ -100,11 +100,11 @@ namespace NJson {
IncreaseArrayCounter();
if (CurrentFieldIdx >= 0) {
FieldValues[CurrentFieldIdx] = ToString(val);
- UpdateRule();
+ UpdateRule();
}
return true;
- }
-
+ }
+
public:
TRewriteJsonImpl(const TJsonParser& parent)
: Parent(parent)
@@ -117,8 +117,8 @@ namespace NJson {
if (!Parent.Fields[n].Path.empty() && Parent.Fields[n].Path.back().Type == NImpl::ARRAY)
ShouldUpdateOnArrayChange = true;
}
- }
-
+ }
+
bool OnOpenMap() override {
IncreaseArrayCounter();
Stack.push_back(TPathElem(NImpl::MAP));
@@ -127,8 +127,8 @@ namespace NJson {
else
UpdateRule();
return true;
- }
-
+ }
+
bool OnOpenArray() override {
IncreaseArrayCounter();
Stack.push_back(TPathElem(-1));
@@ -144,17 +144,17 @@ namespace NJson {
Pop();
if (!Stack.empty())
Pop();
- UpdateRule();
+ UpdateRule();
return true;
}
-
+
bool OnCloseArray() override {
if (!Stack.empty())
Pop();
- UpdateRule();
+ UpdateRule();
return true;
}
-
+
bool OnMapKey(const TStringBuf& key) override {
if (!Stack.empty() && Stack.back().Type == NImpl::MAP_KEY) {
Pop();
@@ -167,23 +167,23 @@ namespace NJson {
UpdateRule();
return true;
}
-
+
bool OnBoolean(bool b) override {
return OnValue(b);
}
-
+
bool OnInteger(long long i) override {
return OnValue(i);
- }
-
+ }
+
bool OnDouble(double f) override {
return OnValue(f);
}
-
+
bool OnString(const TStringBuf& str) override {
return OnValue(str);
}
-
+
bool IsOK() const {
if (HasFormatError)
return false;
@@ -192,17 +192,17 @@ namespace NJson {
return false;
return true;
}
-
+
void WriteTo(IOutputStream& out) const {
for (size_t n = 0; n < FieldValues.size(); ++n)
out << "\t" << FieldValues[n];
}
-
+
void WriteTo(TVector<TString>* res) const {
*res = FieldValues;
}
};
-
+
void TJsonParser::ConvertToTabDelimited(IInputStream& in, IOutputStream& out) const {
TRewriteJsonImpl impl(*this);
ReadJson(&in, &impl);
@@ -211,8 +211,8 @@ namespace NJson {
impl.WriteTo(out);
out.Flush();
}
- }
-
+ }
+
bool TJsonParser::Parse(const TString& json, TVector<TString>* res) const {
TRewriteJsonImpl impl(*this);
TStringInput in(json);
@@ -222,8 +222,8 @@ namespace NJson {
return true;
} else
return false;
- }
-
+ }
+
//struct TTestMe {
// TTestMe() {
// TJsonParser worker;
@@ -232,5 +232,5 @@ namespace NJson {
// TString ret2 = worker.ConvertToTabDelimited(" [1, 2, 3, 4, 5] ");
// }
//} testMe;
-
-}
+
+}