From ba197f8ee6cc9bb2423d155ae7acd053e5a9bbb4 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sat, 10 Aug 2013 05:10:17 +0000 Subject: [PATCH] Support parsing empty arrays and objects --- json.awk | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/json.awk b/json.awk index 94c561f..93f6b49 100644 --- a/json.awk +++ b/json.awk @@ -183,18 +183,20 @@ function json_parse_object(tokens, i, value, key, object, k, v) if (tokens[i++]["text"] != "{") return 0; - do { - delete k - delete v - if (!(i=json_parse_value(tokens, i, k, 0))) - return 0 - if (tokens[i++]["text"] != ":") - return 0 - if (!(i=json_parse_value(tokens, i, v, 0))) - return 0 - json_copy(object, k[0], v[0]) - } while (tokens[i++]["text"] == ",") - i-- + if (tokens[i]["text"] != "}") { + do { + delete k + delete v + if (!(i=json_parse_value(tokens, i, k, 0))) + return 0 + if (tokens[i++]["text"] != ":") + return 0 + if (!(i=json_parse_value(tokens, i, v, 0))) + return 0 + json_copy(object, k[0], v[0]) + } while (tokens[i++]["text"] == ",") + i-- + } if (tokens[i++]["text"] != "}") return 0; @@ -208,13 +210,15 @@ function json_parse_array(tokens, i, value, key, array, k, v) if (tokens[i++]["text"] != "[") return 0; - do { - delete v - if (!(i=json_parse_value(tokens, i, v, 0))) - return 0 - json_copy(array, k++, v[0]) - } while (tokens[i++]["text"] == ",") - i-- + if (tokens[i]["text"] != "]") { + do { + delete v + if (!(i=json_parse_value(tokens, i, v, 0))) + return 0 + json_copy(array, k++, v[0]) + } while (tokens[i++]["text"] == ",") + i-- + } if (tokens[i++]["text"] != "]") return 0; @@ -323,6 +327,8 @@ function json_test_read() " false, \n" \ " null ], \n" \ " \"number\": 42, \n" \ + " \"eobj\": [ ], \n" \ + " \"earr\": { }, \n" \ " \"obj\": { \"A\": \"a!\", \n" \ " \"B\": \"b!\", \n" \ " \"C\": \"c!\" }, \n" \ -- 2.43.2