Re: Stripping a JSON of extra characters in PHP
"J.O. Aho" <[email protected]> Sun, 5 Feb 2023 16:14:32 +0100
| Newsgroups | comp.lang.php |
|---|---|
| Message-ID | <[email protected]> |
On 01/02/2023 16:45, The Doctor wrote:
> From https://developer.moneris.com/livedemo/checkout/preload_req/guide/dotnet
>
> I need a JSON as follows:
>
> {
> "store_id":"moneris",
> "api_token":"hurgle",
For console output:
echo json_encode($object, JSON_PRETTY_PRINT);
For html output:
<pre>
<?php echo nl2br(json_encode($yourArrayOrObject, JSON_PRETTY_PRINT)); ?>
</pre>
If you have an already json encoded string, then you need to use
json_decode to get an object and then encode the object to prettify the
json.
> [{"store_id":"store3","api_token":"yesguy","checkout_id":"chkt23NGFtore3","txn_total":"126.00","environment":"qa","action":"preload"},[{"cart":[[[{"items":{"url":"https:\/\/www.pdsolutions.ca\/images\/newwhiteheader.png","description":"Agricultural Health Study","product_code":"AHS-1298","unit_cost":60,"quantity":"1"},"subtotal":60,"tax":{"amount":3,"description":"GST","rate":"0.05"}},{"items":{"url":"https:\/\/www.pdsolutions.ca\/images\/newwhiteheader.png","description":"Pesticide Applicator Records","product_code":"PAR-1302","unit_cost":60,"quantity":"1"},"subtotal":60,"tax":{"amount":3,"description":"GST","rate":"0.05"}}]]]}],[{"contact_details":{"first_name":"Dave","last_name":"Yadallee","email":"[email protected]","phone":"7809999999"}}],[{"billing_details":{"address_1":"","city":"","province":"","country":"CA","postal_code":""}}]]
>
> How can I carefully strip unnecessary punctuation?
The unnecessary [] that you get is for you use an array to store things
inside, use a class object instead.
Here is a small example, where only the cart is an array in the json:
--- start of php ---
$a = new class{};
$a->store_id = "123";
$a->api_token = "432";
$a->cart = array();
// add item to cart that cast an array to object
$a->cart[] = (object)[ "value" => "12.01", "item" => "banana" ];
// add item to cat that is an undefined object
$itemObj = new class{};
$itemObj->value = "10.02";
$itemObj->item = "apple";
$a->cart[] = $itemObj;
echo json_encode($a, JSON_PRETTY_PRINT);
--- eof ---
Only use array when you are to have a collection of items, for example a
shopping cart, but do not use array when you have a single item, then
better to use an object of some sort, for your example I would actually
create classes that describes the json, you will of course have nested
objects in the end.
--
//Aho