API for advanced JSON manipulation, convertion and fetching.
Index
Members
Methods
Members
-
<static> UWA.Json.encode
-
Convert a value to JSON, optionally replacing values if a replacer function is specified, or optionally including only the specified properties if a replacer array is specified.
Note: Alias to JSON.stringify native browser function.
Example
UWA.Json.encode({}) // '{}'; UWA.Json.encode(true) // 'true'; UWA.Json.encode("foo") // '"foo"'; UWA.Json.encode([1, "false", false]) // '[1,"false",false]'; UWA.Json.encode({ x: 5 }) // '{"x":5}'; UWA.Json.encode({x: 5, y: 6}); // '{"x":5,"y":6}' or '{"y":6,"x":5}' -
<static> UWA.Json.decode
-
Parses a string as JSON and returns the parsed value.
Note: Alias to JSON.parse native browser function.
Example
UWA.Json.decode('{}'); // {} UWA.Json.decode('true'); // true UWA.Json.decode('"foo"'); // "foo" UWA.Json.decode('[1, 5, "false"]'); // [1, 5, "false"] UWA.Json.decode('null'); // null -
<static> UWA.Json.path
-
Apply and JSONPath query filter to a JSON Object.
Example
var MyStore = { "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }; UWA.Json.path(MyStore, "$..author"); // will return ["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"] UWA.Json.path(MyStore, "$..author", { resultType:"PATH" }); // will return [ "$['store']['book'][0]['author']", "$['store']['book'][1]['author']", ...]More examples
XPath JSONPath Result /store/book/author $.store.book[*].author the authors of all books in the store //author $..author all authors /store/ * $.store.* all things in store, which are some books and a red bicycle. /store//price $.store..price the price of everything in the store. //book[3] $..book[2] the third book //book[last()] $..book[(@.length-1)] OR $..book[-1:] the last book in order. //book[position()<3] $..book[0,1] OR $..book[:2] the first two books //book[isbn] $..book[?(@.isbn)] filter all books with isbn number //book[price<10] $..book[?(@.price<10)] filter all books cheapier than 10 // * $..* all Elements in XML document. All members of JSON structure. Detailed usage
JSONPath is a means of using XPath-like syntax to query JSON structures. It is not a standard, but it does offer a means of querying JavaScript structures directly without needing to convert to or from XML.
Here is a complete overview and a side by side comparison of the JSONPath syntax elements with its XPath counterparts.
XPath JSONPath Description / $ the root object/element . @ the current object/element / . or [] child operator // .. recursive descent. JSONPath borrows this syntax from E4X. * - .* all objects/elements regardless their names. n/a [start:end:step] array slice operator borrowed from ES4. [] ?() applies a filter (script) expression. n/a () script expression, using the underlying script engine. .. n/a parent operator () n/a grouping in Xpath @ n/a attribute access. JSON structures don't have attributes. [] [] subscript operator. XPath uses it to iterate over element collections and for predicates. In Javascript and JSON it is the native array operator. pipe [,] Union operator in XPath results in a combination of node sets. JSONPath allows alternate names or array indices as a set. XPath has a lot more to offer (Location pathes in not abbreviated syntax, operators and functions) than listed here. Moreover there is a remarkable difference how the subscript operator works in Xpath and JSONPath.
Square brackets in XPath expressions always operate on the node set resulting from the previous path fragment. Indices always start by 1. With JSONPath square brackets operate on the object or array addressed by the previous path fragment. Indices always start by 0.
- See:
-
- http://www.sitepen.com/blog/2008/07/16/jsonquery-data-querying-beyond-jsonpath/
- {@http://goessner.net/articles/JsonPath/}
Methods
-
<static> UWA.Json.prune(value, options) → {any}
-
Clone a value by converting it to be a safely JSON serializable value. Use this to convert unsupported value types to valid JSON types (null, string, number, array, object) and remove circular references.
Example
var obj = { safe: 1, unsupported: /foo/ }; obj.circular = obj; UWA.Json.prune(obj); // will return the following object: { safe: 1, unsupported: null, circular: null } UWA.Json.prune(obj, { fallback: function (o, reason) { if (UWA.is(o, 'regexp')) { return String(o); } if (reason === 'circular') { return { error: 'Circular reference' }; } return null; } }); // Will return the following object: { safe: 1, unsupported: "/foo/", circular: { error: "Circular reference" } }Parameters
Name Type Argument Description valueany The value to convert
optionsObject <optional>
a hash of options
Properties
Name Type Argument Description toJSONfunction <optional>
a function called on each values, recursively. The value will be replaced by the result of the function in the resulting object. By default, this function is checking if a
toJSONmethod exists and use it to get a serializable result. You normally don't need to change this (see the fallback option).fallbackfunction <optional>
a function called on each unserializable value. For now, values can't be serializable for two reasons:
it does not have a JSON type (ea: not a plain object, null, string, number nor boolean)
it is the reference of previous value (= circular reference)
The value is passed as first argument. The reason is passed as second argument (can be either "unsupported" or "circular"). By default, the fallback returns 'null', so all unserializable values are replaced by null.
Returns
the JSON-safe value
- Type
- any
-
<static> UWA.Json.isJson(value) → {Bool}
-
Regular expression to test property values for being JSON.
Example
UWA.Json.isJson('{}'); // true UWA.Json.isJson('Hello'); // falseParameters
Name Type Description valueString the string to test if it's valid JSON.
Returns
trueis valid JSON elsefalse.- Type
- Bool
-
<static> UWA.Json.xmlToJson(xml) → {Object}
-
Convert a XML String or Object into and Json Object.
Example
UWA.Json.xmlToJson( '<items title="titleAttribute">' + ' <item name="item1" foo="bar">item1TagValue</item>' + ' <item name="item2" foo="bar">item2TagValue</item>' + ' <label>label1TagValue</label>' + ' <label>label2TagValue</label>' + ' <title type="foo">titleTagValue</title>' + '</items>' ); // will return Object: { "items": { "title": [ "titleAttribute", { "type": "foo", "nodeValue": "titleTagValue" } ], "item": [ { "name": "item1", "foo": "bar", "nodeValue": "item1TagValue" }, { "name": "item2", "foo": "bar", "nodeValue": "item2TagValue" } ], "label": [ "label1TagValue", "label2TagValue" ] } }Parameters
Name Type Description xmlString | Object The XML source
Returns
The Object results from XML convertion into JSON.
- Type
- Object
-
<static> UWA.Json.request(url, options)
-
Creates a JSON request using script tag injection and handles the callbacks for you.
Example
// Create a Callback myWidget.parse = function (response) { // your parsing code } // Launch request var myRequest = UWA.Json.request('http://example.org/api.php', { onComplete: myModule.parse, data: { name: "Bob" } }); // Cancel Json request myRequest.cancel(); // Will request url "http://example.org/api.php?callback=&name=Bob" // and expect has response " ("Your data Json or Not")" Parameters
Name Type Description urlString the URL of the data source
optionsObject Settings object
Properties
Name Type Argument Default Description onCompleteFunction Callback receiving the Ajax response
onTimeoutFunction <optional>
Choose your own method
onFailureFunction <optional>
Choose your own method
onCancelFunction <optional>
Choose your own method
dataObject <optional>
{} GET params as object
timeoutNumber <optional>
25000 Set your request timeout in ms
asyncBoolean <optional>
true Asynchronous request
callbackFunction <optional>
random (e.g jsonp123456789)
callbackModeFunction <optional>
JsonP mode function or object
callbackNameString <optional>
JsonP callback parameter name
useOfflineCacheBoolean <optional>
false enable Offline cache
useJsonpRequestBoolean <optional>
false always use JsonP to do the request
Returns
Nothing, but if the request is successful, the callback method is fired and receives the content as parameter.
-
<static> UWA.Json.cleanRequest(jsonpId)
-
Remove JSONP tag script and callback function.
Parameters
Name Type Description jsonpIdObject The id of request callback