Skip to content

Commit 9c87d6e

Browse files
committed
Updated README.md
1 parent f27e5fe commit 9c87d6e

File tree

1 file changed

+4
-184
lines changed

1 file changed

+4
-184
lines changed

README.md

Lines changed: 4 additions & 184 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ The license includes this restriction: ["The software shall be used for good, no
3232

3333
# If you would like to contribute to this project
3434

35-
For more information on contributions, please see [CONTRIBUTING.md](https://github.com/stleary/JSON-java/blob/master/CONTRIBUTING.md)
35+
For more information on contributions, please see [CONTRIBUTING.md](https://github.com/stleary/JSON-java/blob/master/docs/CONTRIBUTING.md)
3636

3737
Bug fixes, code improvements, and unit test coverage changes are welcome! Because this project is currently in the maintenance phase, the kinds of changes that can be accepted are limited. For more information, please read the [FAQ](https://github.com/stleary/JSON-java/wiki/FAQ).
3838

@@ -98,192 +98,12 @@ gradlew clean build test
9898

9999
# Notes
100100

101-
**Recent directory structure change**
102-
103-
_Due to a recent commit - [#515 Merge tests and pom and code](https://github.com/stleary/JSON-java/pull/515) - the structure of the project has changed from a flat directory containing all of the Java files to a directory structure that includes unit tests and several tools used to build the project jar and run the unit tests. If you have difficulty using the new structure, please open an issue so we can work through it._
104-
105-
**Implementation notes**
106-
107-
Numeric types in this package comply with
108-
[ECMA-404: The JSON Data Interchange Format](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf) and
109-
[RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format](https://tools.ietf.org/html/rfc8259#section-6).
110-
This package fully supports `Integer`, `Long`, and `Double` Java types. Partial support
111-
for `BigInteger` and `BigDecimal` values in `JSONObject` and `JSONArray` objects is provided
112-
in the form of `get()`, `opt()`, and `put()` API methods.
113-
114-
Although 1.6 compatibility is currently supported, it is not a project goal and might be
115-
removed in some future release.
116-
117-
In compliance with RFC8259 page 10 section 9, the parser is more lax with what is valid
118-
JSON then the Generator. For Example, the tab character (U+0009) is allowed when reading
119-
JSON Text strings, but when output by the Generator, the tab is properly converted to \t in
120-
the string. Other instances may occur where reading invalid JSON text does not cause an
121-
error to be generated. Malformed JSON Texts such as missing end " (quote) on strings or
122-
invalid number formats (1.2e6.3) will cause errors as such documents can not be read
123-
reliably.
124-
125-
Some notable exceptions that the JSON Parser in this library accepts are:
126-
* Unquoted keys `{ key: "value" }`
127-
* Unquoted values `{ "key": value }`
128-
* Unescaped literals like "tab" in string values `{ "key": "value with an unescaped tab" }`
129-
* Numbers out of range for `Double` or `Long` are parsed as strings
130-
131-
Recent pull requests added a new method `putAll` on the JSONArray. The `putAll` method
132-
works similarly to other `put` methods in that it does not call `JSONObject.wrap` for items
133-
added. This can lead to inconsistent object representation in JSONArray structures.
134-
135-
For example, code like this will create a mixed JSONArray, some items wrapped, others
136-
not:
137-
138-
```java
139-
SomeBean[] myArr = new SomeBean[]{ new SomeBean(1), new SomeBean(2) };
140-
// these will be wrapped
141-
JSONArray jArr = new JSONArray(myArr);
142-
// these will not be wrapped
143-
jArr.putAll(new SomeBean[]{ new SomeBean(3), new SomeBean(4) });
144-
```
145-
146-
For structure consistency, it would be recommended that the above code is changed
147-
to look like 1 of 2 ways.
148-
149-
Option 1:
150-
```Java
151-
SomeBean[] myArr = new SomeBean[]{ new SomeBean(1), new SomeBean(2) };
152-
JSONArray jArr = new JSONArray();
153-
// these will not be wrapped
154-
jArr.putAll(myArr);
155-
// these will not be wrapped
156-
jArr.putAll(new SomeBean[]{ new SomeBean(3), new SomeBean(4) });
157-
// our jArr is now consistent.
158-
```
159-
160-
Option 2:
161-
```Java
162-
SomeBean[] myArr = new SomeBean[]{ new SomeBean(1), new SomeBean(2) };
163-
// these will be wrapped
164-
JSONArray jArr = new JSONArray(myArr);
165-
// these will be wrapped
166-
jArr.putAll(new JSONArray(new SomeBean[]{ new SomeBean(3), new SomeBean(4) }));
167-
// our jArr is now consistent.
168-
```
169-
170-
**Unit Test Conventions**
171-
172-
Test filenames should consist of the name of the module being tested, with the suffix "Test".
173-
For example, <b>Cookie.java</b> is tested by <b>CookieTest.java</b>.
174-
175-
<b>The fundamental issues with JSON-Java testing are:</b><br>
176-
* <b>JSONObjects</b> are unordered, making simple string comparison ineffective.
177-
* Comparisons via **equals()** is not currently supported. Neither <b>JSONArray</b> nor <b>JSONObject</b> override <b>hashCode()</b> or <b>equals()</b>, so comparison defaults to the <b>Object</b> equals(), which is not useful.
178-
* Access to the <b>JSONArray</b> and <b>JSONObject</b> internal containers for comparison is not currently available.
179-
180-
<b>General issues with unit testing are:</b><br>
181-
* Just writing tests to make coverage goals tends to result in poor tests.
182-
* Unit tests are a form of documentation - how a given method works is demonstrated by the test. So for a code reviewer or future developer looking at code a good test helps explain how a function is supposed to work according to the original author. This can be difficult if you are not the original developer.
183-
* It is difficult to evaluate unit tests in a vacuum. You also need to see the code being tested to understand if a test is good.
184-
* Without unit tests, it is hard to feel confident about the quality of the code, especially when fixing bugs or refactoring. Good tests prevent regressions and keep the intent of the code correct.
185-
* If you have unit test results along with pull requests, the reviewer has an easier time understanding your code and determining if it works as intended.
186-
101+
For more information, please see [NOTES.md](https://github.com/stleary/JSON-java/blob/master/docs/NOTES.md)
187102

188103
# Files
189104

190-
**JSONObject.java**: The `JSONObject` can parse text from a `String` or a `JSONTokener`
191-
to produce a map-like object. The object provides methods for manipulating its
192-
contents, and for producing a JSON compliant object serialization.
193-
194-
**JSONArray.java**: The `JSONArray` can parse text from a String or a `JSONTokener`
195-
to produce a vector-like object. The object provides methods for manipulating
196-
its contents, and for producing a JSON compliant array serialization.
197-
198-
**JSONTokener.java**: The `JSONTokener` breaks a text into a sequence of individual
199-
tokens. It can be constructed from a `String`, `Reader`, or `InputStream`. It also can
200-
parse text from a `String`, `Number`, `Boolean` or `null` like `"hello"`, `42`, `true`,
201-
`null` to produce a simple json object.
202-
203-
**JSONException.java**: The `JSONException` is the standard exception type thrown
204-
by this package.
205-
206-
**JSONPointer.java**: Implementation of
207-
[JSON Pointer (RFC 6901)](https://tools.ietf.org/html/rfc6901). Supports
208-
JSON Pointers both in the form of string representation and URI fragment
209-
representation.
210-
211-
**JSONPropertyIgnore.java**: Annotation class that can be used on Java Bean getter methods.
212-
When used on a bean method that would normally be serialized into a `JSONObject`, it
213-
overrides the getter-to-key-name logic and forces the property to be excluded from the
214-
resulting `JSONObject`.
215-
216-
**JSONPropertyName.java**: Annotation class that can be used on Java Bean getter methods.
217-
When used on a bean method that would normally be serialized into a `JSONObject`, it
218-
overrides the getter-to-key-name logic and uses the value of the annotation. The Bean
219-
processor will look through the class hierarchy. This means you can use the annotation on
220-
a base class or interface and the value of the annotation will be used even if the getter
221-
is overridden in a child class.
222-
223-
**JSONString.java**: The `JSONString` interface requires a `toJSONString` method,
224-
allowing an object to provide its own serialization.
225-
226-
**JSONStringer.java**: The `JSONStringer` provides a convenient facility for
227-
building JSON strings.
228-
229-
**JSONWriter.java**: The `JSONWriter` provides a convenient facility for building
230-
JSON text through a writer.
231-
232-
233-
**CDL.java**: `CDL` provides support for converting between JSON and comma
234-
delimited lists.
235-
236-
**Cookie.java**: `Cookie` provides support for converting between JSON and cookies.
237-
238-
**CookieList.java**: `CookieList` provides support for converting between JSON and
239-
cookie lists.
240-
241-
**HTTP.java**: `HTTP` provides support for converting between JSON and HTTP headers.
242-
243-
**HTTPTokener.java**: `HTTPTokener` extends `JSONTokener` for parsing HTTP headers.
244-
245-
**XML.java**: `XML` provides support for converting between JSON and XML.
246-
247-
**JSONML.java**: `JSONML` provides support for converting between JSONML and XML.
248-
249-
**XMLTokener.java**: `XMLTokener` extends `JSONTokener` for parsing XML text.
250-
105+
For more information on files, please see [FILES.md](https://github.com/stleary/JSON-java/blob/master/docs/FILES.md)
251106

252107
# Release history:
253108

254-
JSON-java releases can be found by searching the Maven repository for groupId "org.json"
255-
and artifactId "json". For example:
256-
[https://search.maven.org/search?q=g:org.json%20AND%20a:json&core=gav](https://search.maven.org/search?q=g:org.json%20AND%20a:json&core=gav)
257-
258-
~~~
259-
20210307 Recent commits and potentially breaking fix to JSONPointer
260-
261-
20201115 Recent commits and first release after project structure change
262-
263-
20200518 Recent commits and snapshot before project structure change
264-
265-
20190722 Recent commits
266-
267-
20180813 POM change to include Automatic-Module-Name (#431)
268-
269-
20180130 Recent commits
270-
271-
20171018 Checkpoint for recent commits.
272-
273-
20170516 Roll up recent commits.
274-
275-
20160810 Revert code that was breaking opt*() methods.
276-
277-
20160807 This release contains a bug in the JSONObject.opt*() and JSONArray.opt*() methods,
278-
it is not recommended for use.
279-
Java 1.6 compatability fixed, JSONArray.toList() and JSONObject.toMap(),
280-
RFC4180 compatibility, JSONPointer, some exception fixes, optional XML type conversion.
281-
Contains the latest code as of 7 Aug 2016
282-
283-
20160212 Java 1.6 compatibility, OSGi bundle. Contains the latest code as of 12 Feb 2016.
284-
285-
20151123 JSONObject and JSONArray initialization with generics. Contains the latest code as of 23 Nov 2015.
286-
287-
20150729 Checkpoint for Maven central repository release. Contains the latest code
288-
as of 29 July 2015.
289-
~~~
109+
For the release history, please see [RELEASES.md](https://github.com/stleary/JSON-java/blob/master/docs/RELEASES.md)

0 commit comments

Comments
 (0)