From 39e6a1f5ccd25abba5b2f618cec772b24f40085f Mon Sep 17 00:00:00 2001 From: Frederic Martinsons Date: Sat, 10 Sep 2022 08:44:40 +0200 Subject: Add new api json_reader_get_current_node This can be useful to extract a sub json structure during parsing of another (for example when we don't know in advance the format of this sub json and just want to pass it to another consumer). Closes #9 Signed-off-by: Frederic Martinsons --- json-glib/json-reader.c | 19 +++++++++++++++++++ json-glib/json-reader.h | 2 ++ json-glib/tests/reader.c | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/json-glib/json-reader.c b/json-glib/json-reader.c index cc10cc8..3e58853 100644 --- a/json-glib/json-reader.c +++ b/json-glib/json-reader.c @@ -1117,3 +1117,22 @@ json_reader_get_member_name (JsonReader *reader) return g_ptr_array_index (reader->priv->members, reader->priv->members->len - 1); } + +/** + * json_reader_get_current_node: + * @reader: a reader + * + * Retrieves the reader node at the current position. + * + * Return value: (nullable) (transfer none): the current node of the reader + * + * Since: 1.8 + */ +JsonNode * +json_reader_get_current_node (JsonReader *reader) +{ + g_return_val_if_fail (JSON_IS_READER (reader), NULL); + json_reader_return_val_if_error_set (reader, NULL); + + return reader->priv->current_node; +} diff --git a/json-glib/json-reader.h b/json-glib/json-reader.h index 105e88c..9efe36c 100644 --- a/json-glib/json-reader.h +++ b/json-glib/json-reader.h @@ -152,6 +152,8 @@ JSON_AVAILABLE_IN_1_0 gboolean json_reader_get_boolean_value (JsonReader *reader); JSON_AVAILABLE_IN_1_0 gboolean json_reader_get_null_value (JsonReader *reader); +JSON_AVAILABLE_IN_1_8 +JsonNode * json_reader_get_current_node (JsonReader *reader); #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonReader, g_object_unref) diff --git a/json-glib/tests/reader.c b/json-glib/tests/reader.c index 947fbc9..2ad2ec6 100644 --- a/json-glib/tests/reader.c +++ b/json-glib/tests/reader.c @@ -9,6 +9,9 @@ static const gchar *test_base_object_data = static const gchar *test_reader_level_data = " { \"list\": { \"181195771\": { \"given_url\": \"http://www.gnome.org/json-glib-test\" } } }"; +static const gchar *test_reader_current_node_data = +" { \"object\": { \"subobject\": { \"key\": \"value\" } } }"; + /* https://bugzilla.gnome.org/show_bug.cgi?id=758580 */ static const char *test_reader_null_value_data = "{ \"v\": null }"; @@ -239,6 +242,41 @@ test_reader_skip_bom (void) g_object_unref (parser); } +static void +test_reader_current_node (void) +{ + JsonParser *parser = json_parser_new (); + JsonReader *reader = json_reader_new (NULL); + JsonNode *current = NULL; + gchar* node_string = NULL; + const gchar* expected_data = "{\"subobject\":{\"key\":\"value\"}}"; + GError *error = NULL; + + g_assert_null (json_reader_get_current_node (reader)); + + json_parser_load_from_data (parser, test_reader_current_node_data, -1, &error); + g_assert_no_error (error); + + json_reader_set_root (reader, json_parser_get_root (parser)); + + /* Grab the list */ + g_assert_true (json_reader_read_member (reader, "object")); + + /* Get the node at the current position */ + current = json_reader_get_current_node (reader); + g_assert_nonnull (current); + + /* Check that it contains the data waited */ + node_string = json_to_string (current, FALSE); + g_assert_cmpstr (node_string, ==, expected_data); + g_free (node_string); + + json_reader_end_member (reader); + + g_clear_object (&reader); + g_clear_object (&parser); +} + int main (int argc, char *argv[]) @@ -251,6 +289,7 @@ main (int argc, g_test_add_func ("/reader/level", test_reader_level); g_test_add_func ("/reader/null-value", test_reader_null_value); g_test_add_func ("/reader/bom", test_reader_skip_bom); + g_test_add_func ("/reader/currrent-node", test_reader_current_node); return g_test_run (); } -- cgit v1.2.1 From 20cb41d88f1ddb71b90f6b0db7dbfc6709305bb7 Mon Sep 17 00:00:00 2001 From: Frederic Martinsons Date: Sat, 10 Sep 2022 08:41:28 +0200 Subject: Update the README.md for build command example Being explicit on setup args and add compile argument for building Signed-off-by: Frederic Martinsons --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5ecf45f..2eb9044 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,8 @@ Build and installation To build JSON-GLib just run: ```sh - $ meson _build . - $ meson -C _build + $ meson setup _build . + $ meson compile -C _build $ meson test -C _build $ meson install -C _build ``` -- cgit v1.2.1