X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=json.awk;h=93f6b498c9c277bcaff45551f1d6b3cd599d9102;hb=828095c4d5cb9f8a7cb88b742cd7a60d8635db8a;hp=94c561f4b77cb7673e599e8368d023e0a963ed0e;hpb=334890a6a713664ffa4a9d7a35ec7f4bd2cd2e2b;p=~andy%2Frhawk 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" \