JR_OBJ_KV
Description
Conditionally parse a JSON object if key matches expected name.
Parameters
| Name | Direction | Description |
|---|---|---|
si |
in,out | Stream iterator to read from. |
k |
in | Expected key name (C-string). |
Usage example (from documentation)
JR_OBJ_KV(si, "config", {
JR_BOOL_KV(si, "debug", flags.debug_mode);
});Success
Object parsed if key matched
Failure
No-op if key does not match
Usage example (Cross-references)
Usage examples (Cross-references)
JR_OBJ(si, {
JR_OBJ_KV(si, "outer", { obj.found_outer = true; });
JR_ARR_KV(si, "list", {
obj.found_list = true; // Should not execute for empty array
obj.found_list = true; // Should not execute for empty array
});
JR_OBJ_KV(si, "deep", {
obj.found_deep = true;
JR_OBJ_KV(si, "inner", { obj.found_inner = true; }); JR_OBJ_KV(si, "deep", {
obj.found_deep = true;
JR_OBJ_KV(si, "inner", { obj.found_inner = true; });
});
});
JR_OBJ(si, {
JR_OBJ_KV(
si,
"empty_obj", }
);
JR_OBJ_KV(si, "filled_obj", { JR_INT_KV(si, "x", obj.x_value); });
JR_ARR_KV(
si,
JR_OBJ(si, {
JR_OBJ_KV(si, "user", {
JR_INT_KV(si, "id", data.user.id);
JR_OBJ_KV(si, "profile", { JR_OBJ_KV(si, "user", {
JR_INT_KV(si, "id", data.user.id);
JR_OBJ_KV(si, "profile", {
JR_STR_KV(si, "name", data.user.profile.name);
JR_INT_KV(si, "age", data.user.profile.age);
JR_OBJ(si, {
JR_OBJ_KV(si, "company", {
JR_OBJ_KV(si, "departments", {
JR_OBJ_KV(si, "engineering", { JR_OBJ(si, {
JR_OBJ_KV(si, "company", {
JR_OBJ_KV(si, "departments", {
JR_OBJ_KV(si, "engineering", {
JR_STR_KV(si, "head", data.company.departments.engineering.head); JR_OBJ_KV(si, "company", {
JR_OBJ_KV(si, "departments", {
JR_OBJ_KV(si, "engineering", {
JR_STR_KV(si, "head", data.company.departments.engineering.head);
JR_INT_KV(si, "count", data.company.departments.engineering.count);
JR_OBJ(si, {
JR_OBJ_KV(si, "functions", {
// First level: source function ID from key
u64 source_function_id = (u64)ZstrToI64(StrBegin(&key), NULL);
if (response.status) {
JR_OBJ_KV(si, "data", {
u64 source_function_id = (u64)ZstrToI64(StrBegin(&key), NULL);
JR_OBJ(si, { if (response.status) {
WriteFmt("[DEBUG] Status is true, parsing data...\n");
JR_OBJ_KV(si, "data", {
u64 source_function_id = (u64)ZstrToI64(StrBegin(&key), NULL);
WriteFmt("[DEBUG] Source function ID from key: {}\n", source_function_id); if (response.status) {
WriteFmt("[DEBUG] Status is true, parsing data...\n");
JR_OBJ_KV(si, "data", {
u64 source_function_id = (u64)ZstrToI64(StrBegin(&key), NULL);
WriteFmt("[DEBUG] Source function ID from key: {}\n", source_function_id);
JR_OBJ(si, {
JR_OBJ_KV(si, "user", {
JR_STR_KV(si, "name", data.user.name);
JR_STR_KV(si, "email", data.user.email);- In
RoundTrip.c:495:
StrIter si = StrIterFromStr(json);
JR_OBJ(si, {
JR_OBJ_KV(si, "user", {
JR_INT_KV(si, "id", parsed_person.id);
JR_STR_KV(si, "name", parsed_person.name);- In
RoundTrip.c:594:
StrIter si = StrIterFromStr(json);
JR_OBJ(si, {
JR_OBJ_KV(si, "user", {
JR_INT_KV(si, "id", parsed.user.id);
JR_STR_KV(si, "name", parsed.user.name);- In
RoundTrip.c:601:
JR_FLT_KV(si, "salary", parsed.user.salary);
});
JR_OBJ_KV(si, "config", {
JR_BOOL_KV(si, "debug_mode", parsed.config.debug_mode);
JR_INT_KV(si, "timeout", parsed.config.timeout);- In
RoundTrip.c:713:
VecPushBack(&parsed_strings, str);
});
JR_OBJ_KV(si, "empty_object", { found_empty_object = true; });
});
Last updated on