查找包含最大深度2或3中所有允许的结构组合的JSON示例

查找包含最大深度2或3中所有允许的结构组合的JSON示例,json,combinations,grammar,Json,Combinations,Grammar,我已经编写了一个处理JSON对象的程序。现在我想确认我是否遗漏了什么 是否有所有允许的JSON结构组合的JSON示例?大概是这样的: { "key1" : "value", "key2" : 1, "key3" : {"key1" : "value"}, "key4" : [ [ "string1", "string2"

我已经编写了一个处理JSON对象的程序。现在我想确认我是否遗漏了什么

是否有所有允许的JSON结构组合的JSON示例?大概是这样的:

{
    "key1" : "value",
    "key2" : 1,
    "key3" : {"key1" : "value"},
    "key4" : [
                [
                    "string1",
                    "string2"
                ],
                [
                    1,
                    2
                ],
                ...
    ],
    "key5" : true,
    "key6" : false,
    "key7" : null,
    ...
}
正如您在右侧看到的,JSON的语法并不十分困难,但我有几个例外,因为我忘记了处理一些可能的结构组合。例如,在数组中可以有“string、number、object、array、true、false、null”,但在遇到异常之前,我的程序无法处理数组中的数组。所以一切都很好,直到我得到一个数组中包含数组的有效JSON对象

我想用一个JSON对象(我正在寻找)测试我的程序。在这次测试之后,我想确信我的程序能够毫无例外地处理地球上所有可能的有效JSON结构


我不需要在深度5左右的地方筑巢。我只需要嵌套深度2或最大深度3的东西。使用嵌套所有允许的基类型的所有基类型,在该基类型内。

选择支持json的编程语言。 尝试加载您的json,失败时异常消息是描述性的

例如:

Python:

import json, sys;
json.loads(open(sys.argv[1]).read())
生成:

import random, json, os, string

def json_null(depth = 0):
    return None

def json_int(depth = 0):
    return random.randint(-999, 999)

def json_float(depth = 0):
    return random.uniform(-999, 999)

def json_string(depth = 0):
    return ''.join(random.sample(string.printable, random.randrange(10, 40)))

def json_bool(depth = 0):
    return random.randint(0, 1) == 1

def json_list(depth):
    lst = []
    if depth:
        for i in range(random.randrange(8)):
            lst.append(gen_json(random.randrange(depth)))
    return lst

def json_object(depth):
    obj = {}
    if depth:
        for i in range(random.randrange(8)):
            obj[json_string()] = gen_json(random.randrange(depth))
    return obj

def gen_json(depth = 8):
    if depth:
        return random.choice([json_list, json_object])(depth)
    else:
        return random.choice([json_null, json_int, json_float, json_string, json_bool])(depth)

print(json.dumps(gen_json(), indent = 2))

您是否考虑过对象中的转义字符和对象

{
    "key1" : {
                 "key1" : "value",
                 "key2" : [
                              "String1",
                              "String2"
                 ],
             },
    "key2" : "\"This is a quote\"",
    "key3" : "This contains an escaped slash: \\",
    "key4" : "This contains accent charachters: \u00eb \u00ef",
}

注:
\u00eb
\u00ef
分别为。charachtersëandï

问题不在于我的json。这是我的节目。我的程序处理到目前为止我测试过的所有JSON。每次出现异常时,我都会扩展它。我现在需要一些JSON示例,它包含了所有的组合,所以我可以测试我的程序是否一切正常。正如我在上面的文章中所看到的,这个JSON应该有一些所有允许类型的级联。你需要有效和无效的JSON示例吗?我需要一个所有可能的级联成员的有效示例,这些成员允许用于每个type@mahan我需要一个所有可能的级联成员的有效示例,每个类型都允许这些成员:这不太可能,因为显然有一个无限的数字。顺便问一下,“级联”是指“嵌套的”@Dombi Szabolcs:谢谢,这是一个有趣的生成器。但这不是我想要的。有无限多的组合,所以没有这样的组合。无论如何,如果您已经正确地实现了所有基本类型,那么您怎么可能无法正确地实现数组,因为数组只是
[]
”中的基本类型列表?顺便说一句,没有所谓的“JSON对象”的已知概念“。有JSON字符串,然后是JavaScript值。如果要彻底测试库,包括错误处理,显然,您还需要无效JSON的示例。请查看该repo中的示例数据集和其他示例数据集。一些示例必须通过,一些示例必须失败:然后使用
java
JSON对象
标记您的问题。