http://www.mitbbs.com/article_t1/JobHunting/32968629_0_1.html
设计json的data structure实现json encoding 要求one line version先不考虑
indent,follow up考虑indent和括号
http://www.1point3acres.com/bbs/thread-134505-1-1.html
我觉得最好先规范一下type hierarchy, 就像java的json API那样,有JsonObject, JsonElement, JsonArray, JsonPrimitive等. 然后自顶向下调用encoding过程;encoding函数根据不同的type做不同的操作,本质是个递归调用。
http://www.mitbbs.com/article_t1/JobHunting/32968629_0_1.html
第二题可以参考java的jsonObject class,或者类似的。
也就是把json的几个类别弄出来,(int,long,float), string, jsonObject, jsonList
,每个都有自己的__str__().
像画tree一样让__str__()自己recursive print出来就行了。
这题和L家的print nested map level order traversal 是一个思路啊应该。
设计json的data structure实现json encoding 要求one line version先不考虑
indent,follow up考虑indent和括号
http://www.1point3acres.com/bbs/thread-134505-1-1.html
我觉得最好先规范一下type hierarchy, 就像java的json API那样,有JsonObject, JsonElement, JsonArray, JsonPrimitive等. 然后自顶向下调用encoding过程;encoding函数根据不同的type做不同的操作,本质是个递归调用。
- #define print(x) cout << x << endl
- #define input(x) cin >> x
- class JsonObject {
- public:.鐣欏璁哄潧-涓€浜�-涓夊垎鍦�
- virtual string str() = 0;
- };. from: 1point3acres.com/bbs
- . From 1point 3acres bbs
- template <typename T>. from: 1point3acres.com/bbs
- class JsonScalar: public JsonObject {
- public:
- JsonScalar(T value): _value(value) {}.鏈枃鍘熷垱鑷�1point3acres璁哄潧
- virtual string str() {
- return to_string(_value);
- }.鐣欏璁哄潧-涓€浜�-涓夊垎鍦�
- private:
- T _value;
- };
- class JsonString: public JsonObject {
- public:. 鐗涗汉浜戦泦,涓€浜╀笁鍒嗗湴
- JsonString(const string& str): _str(str) {}
- virtual string str() {
- return "\"" + _str + "\"";
- } 鏉ユ簮涓€浜�.涓夊垎鍦拌鍧�.
- private:. From 1point 3acres bbs
- string _str;
- };
- class JsonArray: public JsonObject {
- public:
- JsonArray() {}
- JsonArray(const vector<JsonObject*> vec): _vec(vec) {}
- virtual string str() {
- string res = "[";
- int cnt = 0;
- for (auto p: _vec) {
- if (cnt) {
- res += ", ";
- }
- res += p->str();
- cnt++;.鐣欏璁哄潧-涓€浜�-涓夊垎鍦�
- }
- res += "]";
- return res;
- }
- void add(JsonObject* object_p) {
- _vec.push_back(object_p);
- }.1point3acres缃�
- private:. 1point3acres.com/bbs
- vector<JsonObject*> _vec;
- };
- . 鐗涗汉浜戦泦,涓€浜╀笁鍒嗗湴
- class JsonDict: public JsonObject {
- public:
- JsonDict() {}
- JsonDict(const unordered_map<string, JsonObject*> mp): _mp(mp) {}
- virtual string str() {
- string res = "{";
- int cnt = 0;
- for (auto pp: _mp) {
- if (cnt) {
- res += ", ";
- }
- auto key = pp.first;
- auto value = pp.second;
- res += "\"" + key + "\"";. Waral 鍗氬鏈夋洿澶氭枃绔�,
- res += ": ";
- res += value->str();
- cnt++;-google 1point3acres
- }
- res += "}";
- return res;. 1point 3acres 璁哄潧
- }
- void add(const string& key, JsonObject* value) {
- _mp[key] = value;
- }
- void add(const char* key, JsonObject* value) {
- _mp[key] = value;. Waral 鍗氬鏈夋洿澶氭枃绔�,
- }
- private:
- unordered_map<string, JsonObject*> _mp;
- };
- . 涓€浜�-涓夊垎-鍦帮紝鐙鍙戝竷
- typedef JsonDict Json;
- int main() {
- Json json;
- json.add("winfo_id", new JsonScalar<int>(1));
- json.add("unit_id", new JsonScalar<int>(2));
- json.add("plan_id", new JsonScalar<int>(3));. 1point 3acres 璁哄潧
- json.add("user_id", new JsonScalar<int>(4));
- json.add("url", new JsonString("i am not a url"));. more info on 1point3acres.com
- json.add("bid", new JsonArray({
- new JsonScalar<double>(1.1),
- new JsonScalar<double>(1.2),
- new JsonString("nineteen")
- }));.1point3acres缃�
- json.add("wiseapp", new JsonDict({
- {"Android", new JsonString("url for android")},
- {"iOS", new JsonString("url for ios")},
- {"WP", new JsonString("404 not found")}
- }));
- print(json.str());. 涓€浜�-涓夊垎-鍦帮紝鐙鍙戝竷
- return 0;
- }
http://www.mitbbs.com/article_t1/JobHunting/32968629_0_1.html
第二题可以参考java的jsonObject class,或者类似的。
也就是把json的几个类别弄出来,(int,long,float), string, jsonObject, jsonList
,每个都有自己的__str__().
像画tree一样让__str__()自己recursive print出来就行了。
这题和L家的print nested map level order traversal 是一个思路啊应该。