alexistm / simple-json-php
Simple JSON for PHP makes you able to construct JSON and send the headers easily. The main purposes are speed and ease to use.
Installs: 215
Dependents: 0
Suggesters: 0
Security: 0
Stars: 44
Watchers: 6
Forks: 38
Open Issues: 0
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-04-14 12:58:00 UTC
README
Introduction
Simple JSON for PHP simplify the json_encode
function. Instead of creating a Stdclass and then json_encode it, send, headers and echo the json, you can simply create the object and use $json->send();
.
Pros:
- Easy: As simple as a Stdclass, bundled functions.
- Fast: JSON are encoded with the native json_encode()
- Reliable: Headers are sent automatically
- Complete: You can add objects, properties or arrays
- Callback/Variable or simply a JSON option
- JSONP compatible
- JQuery compatible
Cons:
- Optimized for objects because JSON is an object notation.
Usage
<?php include('../includes/json.php'); use \Simple\json; $json = new json(); // Objects to send (fetched from the DB for example) $object = new stdClass(); $object->LastLog = '123456789123456'; $object->Password = 'Mypassword'; $object->Dramatic = 'Cat'; $object->Things = array(1,2,3); // Forge the JSON $json->data = $object; $json->user = AlexisTM; $json->status = 'online'; // Send the JSON $json->send(); ?>
Sending the json you want
The constructor allow you to send JSON, JSONP with callback or in a variable.
simply a JSON
$json->send(options); > { ... }
Callback JSONP
$json->send_callback('myCallback', options); > myCallback({ ... });
Varibale JSONP
$json->send_var('myVariable', options); > var myVariable = { ... };
Options
Options are the default options passed to json_encode.
JSON_HEX_TAG echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n"; echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n"; echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n"; echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n"; echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE)
Will output:
Normal: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"] Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"] Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"] Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"] Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"] Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"] All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]
For example:
$json->send(JSON_HEX_APOS | JSON_UNESCAPED_UNICODE);
HTML/JS part example
This library give you a strong JSON API capabilities. But an API is useless if you do not have the front-end. Here are some examples.
Callback with a raw json using JQuery.ajax
$.ajax({ dataType: "json", url: 'http://example.com', data: data, done: function(json) { alert(json); } });
Callback with a raw json using JQuery.getJSON
$.getJSON('http://example.com', data, function(json) { alert(json); });
Legacy javascript for dynamic loading for JSONP
function load_script(url) { var s = document.createElement('script'); s.src = url; document.body.appendChild(s); } function load_scripts() { load_script('http://json.api/users/list'); } window.onload=load_scripts;
Validating JSON
To validate the JSON, you can grab back the JSON string via the make() method then pass it through an other library.
$jsonString = $json->make();
Knows dumb errors
- The file format of the PHP script MUST be UTF-8 Without BOM. Else the JSON is corrupted for the JQuery AJAX request.
- You can bypass the file format by asking text and not JSON type in the JQuery request and using JSON, then parsing it yourself.
- If you don't use namespaces, you can call the JSON class via
new \Simple\json()
- If you use
use \Simple;
, you can call the JSON class vianew Simple\json()
- If you use
use \Simple\json;
, you can call the JSON class vianew json()
Contribute
To contribute, just contact me! The first fork will be awesome for me!
NOTE:
The reason it comes in version 4 which changes a bit the API is the speed. I as wondering how fast it was to use the library and after some tests, it shows it was 6 times slower than the native function. Therefore, for my own sake, it has to be reworked.
It now as fast as the native json_encode, without having to think at all.
Licence
This work is under MIT licence. Short version: You have to add Alexis Paques in the credits but you can use it for closed-source commercial project.
What next ?
The next step is obviously to add routes, which is needed to make a powerful API.
References
Informations: https://en.wikipedia.org/wiki/JSONP
Validator: http://json.parser.online.fr
ECMA-404: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
json_encode: https://php.net/manual/fr/function.json-encode.php
Comparaison of JSON PHP libs: http://gggeek.altervista.org/sw/article_20061113.html
JSON API Standard: http://jsonapi.org/
Credits
Alexis PAQUES (@AlexisTM)