Skip to content

JR_STR_KV

JR_STR_KV

Description

Read a string key-value pair if key matches.

Parameters

Name Direction Description
si in,out JSON stream iterator to read from.
k in Expected key name (C-string).
str out Destination Str to store the value.

Usage example (from documentation)

  JR_STR_KV(si, "username", user.name);

Success

str contains the value if key matched

Failure

No-op if key does not match

Usage example (Cross-references)

Usage examples (Cross-references)
            JR_OBJ(json, {                                                                                                 \
                JR_OBJ_KV(json, "project", {                                                                               \
                    JR_STR_KV(json, "build_dir", p.build_dir);                                                             \
                    JR_ARR_KV(json, "test_directories", {                                                                  \
                        Str s = StrInit();                                                                                 \
        i64 last_value = 0;
        JR_OBJ(json, {
            JR_STR_KV(json, "name", enum_name);
            JR_BOOL_KV(json, "to_from_str", to_from_str);
    
            JR_OBJ_KV(json, "invalid_enum", {
                JR_STR_KV(json, "name", invalid_enum.name);
                JR_INT_KV(json, "value", invalid_enum.value);
                JR_INT_KV(json, "str", invalid_enum.value);
    
                JR_OBJ(json, {
                    JR_STR_KV(json, "name", e.name);
                    JR_INT_KV(json, "value", e.value);
                    JR_STR_KV(json, "str", e.str);
                    JR_STR_KV(json, "name", e.name);
                    JR_INT_KV(json, "value", e.value);
                    JR_STR_KV(json, "str", e.str);
                });
    
        JR_OBJ(si, {
            JR_STR_KV(si, "name", name);
            JR_STR_KV(si, "city", city);
        });
        JR_OBJ(si, {
            JR_STR_KV(si, "name", name);
            JR_STR_KV(si, "city", city);
        });
        JR_OBJ(si, {
            JR_INT_KV(si, "id", person.id);
            JR_STR_KV(si, "name", person.name);
            JR_INT_KV(si, "age", person.age);
            JR_BOOL_KV(si, "is_active", person.is_active);
            JR_BOOL_KV(si, "debug_mode", config.debug_mode);
            JR_INT_KV(si, "timeout", config.timeout);
            JR_STR_KV(si, "log_level", config.log_level);
        });
        JR_OBJ(si, {
            JR_OBJ_KV(si, "user", {
                JR_STR_KV(si, "name", data.user.name);
                JR_STR_KV(si, "email", data.user.email);
            });
            JR_OBJ_KV(si, "user", {
                JR_STR_KV(si, "name", data.user.name);
                JR_STR_KV(si, "email", data.user.email);
            });
            JR_BOOL_KV(si, "active", data.active);
        JR_OBJ(si, {
            JR_INT_KV(si, "id", product.id);
            JR_STR_KV(si, "name", product.name);
            JR_FLT_KV(si, "price", product.price);
            JR_ARR_KV(si, "tags", {
        JR_OBJ(si, {
            JR_INT_KV(si, "id", data.id);
            JR_STR_KV(si, "name", data.name);
            JR_BOOL_KV(si, "active", data.active);
            JR_FLT_KV(si, "score", data.score);
                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_STR_KV(si, "status", data.status);
        });
                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_FLT_KV(si, "budget", data.company.departments.engineering.budget);
                    });
                });
                JR_STR_KV(si, "name", data.company.name);
            });
        });
                    JR_OBJ(si, {
                        JR_FLT_KV(si, "distance", sym.distance);
                        JR_STR_KV(si, "name", sym.function_name);
                    });
        JR_OBJ(si, {
            JR_BOOL_KV(si, "status", response.status);
            JR_STR_KV(si, "message", response.message);
    
            if (response.status) {
                            JR_INT_KV(si, "nearest_neighbor_analysis_id", sym.analysis_id);
                            JR_INT_KV(si, "nearest_neighbor_binary_id", sym.binary_id);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_INT_KV(si, "nearest_neighbor_binary_id", sym.binary_id);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_function_name_mangled", sym.function_mangled_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_function_name_mangled", sym.function_mangled_name);
                        });
        JR_OBJ(si, {
            JR_INT_KV(si, "id", info.id);
            JR_STR_KV(si, "name", info.name);
            JR_INT_KV(si, "size", info.size);
            JR_INT_KV(si, "vaddr", info.vaddr);
        JR_OBJ(si, {
            JR_INT_KV(si, "id", info.id);
            JR_STR_KV(si, "name", info.name);
        });
        JR_OBJ(si, {
            JR_INT_KV(si, "binary_id", result.binary_id);
            JR_STR_KV(si, "binary_name", result.binary_name);
            JR_INT_KV(si, "analysis_id", result.analysis_id);
            JR_STR_KV(si, "sha256", result.sha256);
            JR_STR_KV(si, "binary_name", result.binary_name);
            JR_INT_KV(si, "analysis_id", result.analysis_id);
            JR_STR_KV(si, "sha256", result.sha256);
            JR_STR_KV(si, "created_at", result.created_at);
            JR_INT_KV(si, "model_id", result.model_id);
            JR_INT_KV(si, "analysis_id", result.analysis_id);
            JR_STR_KV(si, "sha256", result.sha256);
            JR_STR_KV(si, "created_at", result.created_at);
            JR_INT_KV(si, "model_id", result.model_id);
            JR_STR_KV(si, "model_name", result.model_name);
            JR_STR_KV(si, "created_at", result.created_at);
            JR_INT_KV(si, "model_id", result.model_id);
            JR_STR_KV(si, "model_name", result.model_name);
            JR_STR_KV(si, "owned_by", result.owned_by);
        });
            JR_INT_KV(si, "model_id", result.model_id);
            JR_STR_KV(si, "model_name", result.model_name);
            JR_STR_KV(si, "owned_by", result.owned_by);
        });
        JR_OBJ(si, {
            JR_BOOL_KV(si, "status", response.status);
            JR_STR_KV(si, "message", response.message);
    
            WriteFmt("[DEBUG] Parsed status: {}, message: '", response.status ? "true" : "false");
                            JR_INT_KV(si, "nearest_neighbor_analysis_id", sym.analysis_id);
                            JR_INT_KV(si, "nearest_neighbor_binary_id", sym.binary_id);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_INT_KV(si, "nearest_neighbor_binary_id", sym.binary_id);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_function_name_mangled", sym.function_mangled_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_function_name_mangled", sym.function_mangled_name);
                        });
        JR_OBJ(si, {
            JR_BOOL_KV(si, "status", response.status);
            JR_STR_KV(si, "message", response.message);
    
            WriteFmt("[DEBUG] Parsed status: {}, message: '", response.status ? "true" : "false");
                            JR_INT_KV(si, "nearest_neighbor_analysis_id", sym.analysis_id);
                            JR_INT_KV(si, "nearest_neighbor_binary_id", sym.binary_id);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_INT_KV(si, "nearest_neighbor_binary_id", sym.binary_id);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_analysis_name", sym.analysis_name);
                            JR_STR_KV(si, "nearest_neighbor_function_name", sym.function_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_function_name_mangled", sym.function_mangled_name);
                            JR_STR_KV(si, "nearest_neighbor_sha_256_hash", sym.sha256);
                            JR_BOOL_KV(si, "nearest_neighbor_debug", sym.debug);
                            JR_STR_KV(si, "nearest_neighbor_function_name_mangled", sym.function_mangled_name);
                        });
            JR_FLT_KV(si, "temperature", parsed.temperature);
            JR_BOOL_KV(si, "enabled", parsed.enabled);
            JR_STR_KV(si, "message", parsed.message);
        });
        StrIter si = StrIterFromStr(json);
        JR_OBJ(si, {
            JR_STR_KV(si, "empty", parsed.empty);
            JR_STR_KV(si, "simple", parsed.simple);
            JR_STR_KV(si, "with_spaces", parsed.with_spaces);
        JR_OBJ(si, {
            JR_STR_KV(si, "empty", parsed.empty);
            JR_STR_KV(si, "simple", parsed.simple);
            JR_STR_KV(si, "with_spaces", parsed.with_spaces);
            JR_STR_KV(si, "with_special", parsed.with_special);
            JR_STR_KV(si, "empty", parsed.empty);
            JR_STR_KV(si, "simple", parsed.simple);
            JR_STR_KV(si, "with_spaces", parsed.with_spaces);
            JR_STR_KV(si, "with_special", parsed.with_special);
        });
            JR_STR_KV(si, "simple", parsed.simple);
            JR_STR_KV(si, "with_spaces", parsed.with_spaces);
            JR_STR_KV(si, "with_special", parsed.with_special);
        });
            JR_OBJ_KV(si, "user", {
                JR_INT_KV(si, "id", parsed_person.id);
                JR_STR_KV(si, "name", parsed_person.name);
                JR_INT_KV(si, "age", parsed_person.age);
                JR_BOOL_KV(si, "is_active", parsed_person.is_active);
            JR_OBJ_KV(si, "user", {
                JR_INT_KV(si, "id", parsed.user.id);
                JR_STR_KV(si, "name", parsed.user.name);
                JR_INT_KV(si, "age", parsed.user.age);
                JR_BOOL_KV(si, "is_active", parsed.user.is_active);
                JR_BOOL_KV(si, "debug_mode", parsed.config.debug_mode);
                JR_INT_KV(si, "timeout", parsed.config.timeout);
                JR_STR_KV(si, "log_level", parsed.config.log_level);
                JR_ARR_KV(si, "features", {
                    Str feature = StrInit();
        StrIter si = StrIterFromStr(json);
        JR_OBJ(si, {
            JR_STR_KV(si, "empty_string", parsed_str);
            JR_ARR_KV(si, "empty_numbers", {
                i32 num = 0;
    
        JR_OBJ(si, {
            JR_STR_KV(si, "name", obj.name);
            JR_STR_KV(si, "description", obj.description);
        });
        JR_OBJ(si, {
            JR_STR_KV(si, "name", obj.name);
            JR_STR_KV(si, "description", obj.description);
        });
    
        JR_OBJ(si, {
            JR_STR_KV(si, "path", obj.path);
            JR_STR_KV(si, "message", obj.message);
            JR_STR_KV(si, "data", obj.data);
        JR_OBJ(si, {
            JR_STR_KV(si, "path", obj.path);
            JR_STR_KV(si, "message", obj.message);
            JR_STR_KV(si, "data", obj.data);
        });
            JR_STR_KV(si, "path", obj.path);
            JR_STR_KV(si, "message", obj.message);
            JR_STR_KV(si, "data", obj.data);
        });
    
        JR_OBJ(si, {
            JR_STR_KV(si, "escaped", obj.escaped);
            JR_STR_KV(si, "backslash", obj.backslash);
            JR_STR_KV(si, "newline", obj.newline);
        JR_OBJ(si, {
            JR_STR_KV(si, "escaped", obj.escaped);
            JR_STR_KV(si, "backslash", obj.backslash);
            JR_STR_KV(si, "newline", obj.newline);
            JR_STR_KV(si, "tab", obj.tab);
            JR_STR_KV(si, "escaped", obj.escaped);
            JR_STR_KV(si, "backslash", obj.backslash);
            JR_STR_KV(si, "newline", obj.newline);
            JR_STR_KV(si, "tab", obj.tab);
        });
            JR_STR_KV(si, "backslash", obj.backslash);
            JR_STR_KV(si, "newline", obj.newline);
            JR_STR_KV(si, "tab", obj.tab);
        });
    
        JR_OBJ(si, {
            JR_STR_KV(si, "name", obj.name);
            JR_INT_KV(si, "value", obj.value);
            JR_BOOL_KV(si, "flag", obj.flag);
Last updated on