Parse JSON text and compress to binary format.
20% smaller and 20% faster.
JSON text parser benchmark
Name
Time
Codebase
gason
707
650
RapidJSON
1734
38,112
jsonc
984
889 (jvalue.* + jparser.*)
yyjson
542
18,000
Format
Size
Parse Time
JSON text
100%
100%
version 1
20%
20%
version 3
90%
0
//parser
JsonAllocator allocator;
JsonParser parser(&allocator);
Value* value0 = parser.parse((char*)str.c_str());
//check error
if (!value0 || parser.get_error()[0] != 0) {
printf("parser json error: %s\n", parser.get_error());
return;
}
//get value
Value* node = value0->get("value");
int a = node->as_int();
//object iteration
for (auto it = node->begin(); it != node->end(); ++it) {
const char* key = it->get_name();
const char* val = it->as_str();
}
jc::JsonAllocator allocator;
jc::JsonNode* root = allocator.allocNode(jc::Type::Object);
root->insert_pair("version", allocator.alloc_str("1.0"));
jc::JsonNode* list = allocator.allocNode(jc::Type::Array);
auto p1 = allocator.alloc_int(0);
auto p2 = allocator.alloc_int(1);
array->insert(p1);
array->insert(p2);
array->reverse();
root->insert_pair(allocator.strdup(propertyName), array);
root->reverse();
//dump json str
std::string jstr;
value0->to_json(jstr);
puts(jstr.c_str());
//write
JCWriter c;
c.write(value, out);
//read
JsonAllocator allocator;
JCReader r(buffer, length, &allocator);
Value* value = r.read();
//write
JEncoder encoder;
auto buffer = encoder.encode(value);
out.write(buffer.data(), buffer.size());
//read
value = JEncoder::decode(buffer, length);
HiML is a JSON like data format for serialization.
//comment
name = form
Pane {
x = 1
y = 2
Button {
id = button1
x=1
y=2
}
Button {
x = 1, y = 2
}
1,2,3,
a
b
c
}
no array, object as array
no data type, metadata in mind
quotes is options
comma is options
no braces for top level object
comment by //
Type
ExtType
Length(optional)
Data(optional)
4bit
4bit
1/2/4/8byte
length byte
Name
Type
ExtType
null
primi
0
true
primi
1
false
primi
2
Name
Type
ExtType
Length
tiny int
1
0~10,11
int8
1
12
1byte
int16
1
13
2byte
int32
1
14
4byte
int64
1
15
8byte
tiny float
2
0~10,11
float32
2
14
4byte
float64
2
15
8byte
Name
Type
ExtType
Length
Data
array
3
0~10,12,13,14,15
1/2/4/8byte
val1,val2,...
object
4
0~10,12,13,14,15
1/2/4/8byte
key1,val1,key2,val2,...
Name
Type
ExtType
Length
Data
new string
5
0~10,12,13,14,15
1/2/4/8byte
data
Name
Type
ExtType
Index
ref
6
0~10,12,13,14,15
1/2/4/8byte