Difference between revisions of "JSON"

From Lazarus wiki
Jump to navigationJump to search
Line 1: Line 1:
 
+
__NOTOC__
 
[http://www.json.org JSON] (JavaScript Object Notation) is an open form of data representation that provides a standardised data exchange format using simple text. As the name suggests, it is based on a subset of the JavaScript programming language; however, it is completely language-agnostic. Besides being easy for humans to read and write, it is also easy for machines to parse and generate.
 
[http://www.json.org JSON] (JavaScript Object Notation) is an open form of data representation that provides a standardised data exchange format using simple text. As the name suggests, it is based on a subset of the JavaScript programming language; however, it is completely language-agnostic. Besides being easy for humans to read and write, it is also easy for machines to parse and generate.
  
Line 62: Line 62:
 
JSON implementation is not very strict, and alot of leeway is granted to the client application and/or parser to enforce the guidelines. There are two main implementations of JSON:
 
JSON implementation is not very strict, and alot of leeway is granted to the client application and/or parser to enforce the guidelines. There are two main implementations of JSON:
  
=== The official RFC 4627 (JSON Specification) syntax ===
+
=== The official JSON Specification syntax ===
 
This implementation adheres strictly to the RFC 4627 guidelines above and does not entertain deviation from the specification.
 
This implementation adheres strictly to the RFC 4627 guidelines above and does not entertain deviation from the specification.
  
Line 76: Line 76:
 
* [[fcl-json]] package
 
* [[fcl-json]] package
 
* [http://www.json.org|Official JSON website]
 
* [http://www.json.org|Official JSON website]
* [http://www.freeformatter.com/json-validator.html#json-explained]
 

Revision as of 23:02, 17 October 2013

JSON (JavaScript Object Notation) is an open form of data representation that provides a standardised data exchange format using simple text. As the name suggests, it is based on a subset of the JavaScript programming language; however, it is completely language-agnostic. Besides being easy for humans to read and write, it is also easy for machines to parse and generate.


A JSON Object is nothing more than a collection of comma-separated name/value pairs (often called members) enclosed in curly brackets:

{"name1":value1, "name2":value2 ...}

To make it easier for humans to read and visualize, the name/value pairs are often listed vertically:

{
	"name1": value1,
	"name2": value2
}

The name is supposed to be a double-quoted string, while the value can be any of the following:

  • a simple string, numeric, boolean or null value (strings are enclosed in double quotes):
    {"id":1, "name":"John Doe", "married":false}
  • an array; which is a collection of comma-separated values in square brackets:
    {"primeNumbers":[2, 3, 5, 7, 11, 13, 17], "oddNumbers":[1,3,5,7]}
  • an object; which is a collection of name:value pairs enclosed in curly brackets:
    {"address":{"street":"145 Koinange Street", "City":"Nairobi", "Country":"Kenya"}}


JSON objects can always be nested arbitrarily to create even more complex objects:

{"user":
	{	"userid": 1900,
		"username": "jsmith",
		"password": "secret",
		"groups": [ "admins", "users", "maintainers"]
	}
}


Valid JSON format

There are a few rules and guidelines that inform the JSON syntax:

  • JSON objects are encapsulated within opening and closing brackets { }. An empty object can be represented by { }
  • Arrays are encapsulated within opening and closing square brackets [ ]. An empty array can be represented by [ ]
  • A member is represented by a key-value pair
  • The key of a member should be contained in double quotes
  • Each member SHOULD have a unique key within an object structure
  • The value of a member must be contained in double quotes if it is a string
  • Boolean values are represented using the true or false literals in lower case
  • Number values are represented using double-precision floating-point format; Scientific notation is supported; Numbers should not have leading zeroes
  • "Offensive" characters in a string need to be escaped using the backslash character
  • Null values are represented by the null literal in lower case
  • Other object types, such as dates, are not natively supported and should be converted to strings; to be managed by the parser/client
  • Each member of an object or each array value must be followed by a comma if it is not the last one
  • The common extension for json files is .json
  • The MIME type for json files is application/json


Implementations

JSON implementation is not very strict, and alot of leeway is granted to the client application and/or parser to enforce the guidelines. There are two main implementations of JSON:

The official JSON Specification syntax

This implementation adheres strictly to the RFC 4627 guidelines above and does not entertain deviation from the specification.

The Javascript syntax

This implementation follows the implementation of the Javascript programming language and as such allows for a few deviations from the official specification. For example:

  1. allows un-quoted keys eg {name: "John Doe" }
  2. allows single quotes for keys and/or string values; and a liberal mix of single and double quotes eg {'name': "John Doe", "language":'Pascal'}
  3. allows trailing comma after the last member of an array and/or object eg {"keywords":["if","begin","for",], "IDEs":["Lazarus","fpIDE","MSEide"],}

See also