diff options
author | Lars Schneider <lars.schneider@autodesk.com> | 2012-10-13 23:09:30 +0200 |
---|---|---|
committer | Lars Schneider <lars.schneider@autodesk.com> | 2012-10-14 21:29:36 +0200 |
commit | 969004274e5569304e8c07e01d9db445aa0f02ae (patch) | |
tree | 1b00567ab55fc4f27b8fbac659bf6c0d74a53e01 /tests/runner.py | |
parent | 45ba35aa01f1650ed28479976262236bbf204ef1 (diff) |
Add `library_jansson` for JSON parsing.
Jansson is a C library for encoding, decoding and manipulating JSON data [1]. `library_jansson` mimics this interface (currently only for decoding) to perform JSON parsing in Javascript.
[1] https://github.com/akheron/jansson
Diffstat (limited to 'tests/runner.py')
-rwxr-xr-x | tests/runner.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/runner.py b/tests/runner.py index 0c677b58..a91e307a 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -5256,6 +5256,59 @@ int main(int argc, char **argv) { self.do_run(src, '789:123.46\n0:100.1') + def test_jansson(self): + src = ''' + #include <jansson.h> + #include <stdio.h> + #include <string.h> + + int main() + { + const char* jsonString = "{\\"key\\": \\"value\\",\\"array\\": [\\"array_item1\\",\\"array_item2\\",\\"array_item3\\"],\\"dict\\":{\\"number\\": 3,\\"float\\": 2.2}}"; + + json_error_t error; + json_t *root = json_loadb(jsonString, strlen(jsonString), 0, &error); + + if(!root || !json_is_object(root)) + return 0; + printf("%s\\n", json_string_value(json_object_get(root, "key"))); + + json_t *array = json_object_get(root, "array"); + if(!array || !json_is_array(array)) + return 0; + for(size_t i=0; i<json_array_size(array); ++i) + { + json_t *arrayNode = json_array_get(array, i); + if(!root || !json_is_string(arrayNode)) + return 0; + printf("%s\\n", json_string_value(arrayNode)); + } + + json_t *dict = json_object_get(root, "dict"); + if(!dict || !json_is_object(dict)) + return 0; + + json_t *numberNode = json_object_get(dict, "number"); + json_t *floatNode = json_object_get(dict, "float"); + + if(!numberNode || !json_is_number(numberNode) || + !floatNode || !json_is_real(floatNode)) + return 0; + + printf("%i\\n", json_integer_value(numberNode)); + printf("%.2f\\n", json_number_value(numberNode)); + printf("%.2f\\n", json_real_value(floatNode)); + + json_decref(root); + + if(!json_is_object(root)) + printf("jansson!\\n"); + + return 0; + } + ''' + self.do_run(src, 'value\narray_item1\narray_item2\narray_item3\n3\n3.00\n2.20\njansson!') + ### 'Medium' tests def test_fannkuch(self): |