Congrats on the release!<p>I'd recommend mentioning "fuzz testing" and "fuzzing" in the description to help people find it.<p>Simple and Sample are very close in spelling.<p>The sample makes sense, but a big use case for this would be testing APIs, and in that case, a JSON object is commonly modelled after the attributes of a class. So in that scenario, simply randomizing the keys would just blow up, which is not useful for testing. The kinds of errors you usually want to catch are small glitches.<p>I needed to describe the patterns that JSON could take when converting to and from native types, and I did that here [1] so it might be a useful structure to consider. But, roughly, you have several common cases:<p>1. atoms<p>2. homogenous arrays (same type of all elements)<p>3. heterogeneous arrays (element X has type Y, bounded length)<p>4. homogenous objects (same value type for all elements)<p>5. heterogeneous objects (key X has type Y, required + optional keys)<p>6. alternatives<p>Implement those and you probably cover any structure someone could throw at it. You'll also want to make it easy to distinguish between required and optional keys.<p>If you take a page from QuickCheck[2], it's nice to be able to implement a "reduce" feature. The idea is you produce something complex that breaks it, and simplify it to find a minimal test case.<p>You might go both ways... generate a valid pattern and add crap to it to see how tolerant it is. Or possibly start with reasonable length strings and make it possible to make them longer and longer.<p>[1]: <a href="https://github.com/UnitedIncome/json-syntax/blob/master/json_syntax/pattern.py" rel="nofollow">https://github.com/UnitedIncome/json-syntax/blob/master/json...</a><p>[2]: <a href="https://hackage.haskell.org/package/QuickCheck" rel="nofollow">https://hackage.haskell.org/package/QuickCheck</a><p>Versions of QuickCheck exist in many languages, e.g. <a href="https://github.com/HypothesisWorks/hypothesis-java" rel="nofollow">https://github.com/HypothesisWorks/hypothesis-java</a>