コード例 #1
0
ファイル: json.cpp プロジェクト: 0871087123/godot
String JSON::_print_var(const Variant& p_var) {

	switch(p_var.get_type()) {

		case Variant::NIL: return "null";
		case Variant::BOOL: return p_var.operator bool() ? "true": "false";
		case Variant::INT: return itos(p_var);
		case Variant::REAL: return rtos(p_var);
		case Variant::INT_ARRAY:
		case Variant::REAL_ARRAY:
		case Variant::STRING_ARRAY:
		case Variant::ARRAY: {

			String s = "[";
			Array a = p_var;
			for(int i=0;i<a.size();i++) {
				if (i>0)
					s+=", ";
				s+=_print_var(a[i]);
			}
			s+="]";
			return s;
		};
		case Variant::DICTIONARY: {

			String s = "{";
			Dictionary d = p_var;
			List<Variant> keys;
			d.get_key_list(&keys);

			for (List<Variant>::Element *E=keys.front();E;E=E->next()) {

				if (E!=keys.front())
					s+=", ";
				s+=_print_var(String(E->get()));
				s+=":";
				s+=_print_var(d[E->get()]);
			}

			s+="}";
			return s;
		};
		default: return "\""+String(p_var).c_escape()+"\"";

	}

}
コード例 #2
0
ファイル: json.cpp プロジェクト: 93i/godot
String JSON::_print_var(const Variant &p_var, const String &p_indent, int p_cur_indent, bool p_sort_keys) {

	String colon = ":";
	String end_statement = "";

	if (!p_indent.empty()) {
		colon += " ";
		end_statement += "\n";
	}

	switch (p_var.get_type()) {

		case Variant::NIL: return "null";
		case Variant::BOOL: return p_var.operator bool() ? "true" : "false";
		case Variant::INT: return itos(p_var);
		case Variant::REAL: return rtos(p_var);
		case Variant::POOL_INT_ARRAY:
		case Variant::POOL_REAL_ARRAY:
		case Variant::POOL_STRING_ARRAY:
		case Variant::ARRAY: {

			String s = "[";
			s += end_statement;
			Array a = p_var;
			for (int i = 0; i < a.size(); i++) {
				if (i > 0) {
					s += ",";
					s += end_statement;
				}
				s += _make_indent(p_indent, p_cur_indent + 1) + _print_var(a[i], p_indent, p_cur_indent + 1, p_sort_keys);
			}
			s += end_statement + _make_indent(p_indent, p_cur_indent) + "]";
			return s;
		};
		case Variant::DICTIONARY: {

			String s = "{";
			s += end_statement;
			Dictionary d = p_var;
			List<Variant> keys;
			d.get_key_list(&keys);

			if (p_sort_keys)
				keys.sort();

			for (List<Variant>::Element *E = keys.front(); E; E = E->next()) {

				if (E != keys.front()) {
					s += ",";
					s += end_statement;
				}
				s += _make_indent(p_indent, p_cur_indent + 1) + _print_var(String(E->get()), p_indent, p_cur_indent + 1, p_sort_keys);
				s += colon;
				s += _print_var(d[E->get()], p_indent, p_cur_indent + 1, p_sort_keys);
			}

			s += end_statement + _make_indent(p_indent, p_cur_indent) + "}";
			return s;
		};
		default: return "\"" + String(p_var).json_escape() + "\"";
	}
}
コード例 #3
0
ファイル: json.cpp プロジェクト: 93i/godot
String JSON::print(const Variant &p_var, const String &p_indent, bool p_sort_keys) {

	return _print_var(p_var, p_indent, 0, p_sort_keys);
}
コード例 #4
0
ファイル: json.cpp プロジェクト: 0871087123/godot
String JSON::print(const Dictionary& p_dict) {

	return _print_var(p_dict);
}