This is the JSON data I get from our ticket-system. I would like to parse it with PHP and save the data in a database to create statistics and a dashboard so everyone can see how many tickets are open and the latest closed tickets.
I can read some of the data but not everything.
{
"address":"belgium",
"workers":{
"peter":{
"worker":"peter",
"open_close_time":"45.6 T/h",
"closed_tickets":841,
"open_tickets":7,
"last_checkin":1498768133,
"days_too_late":0
},
"mark":{
"worker":"mark",
"open_close_time":"45.9 T/h",
"closed_tickets":764,
"open_tickets":2,
"last_checkin":1498768189,
"days_too_late":0
},
"walter":{
"worker":"walter",
"open_close_time":"20.0 T/h",
"closed_tickets":595,
"open_tickets":4,
"last_checkin":1498767862,
"days_too_late":0
}
},
"total_tickets":2213,
"tickets":[
{
"id":2906444760,
"client":"297",
"processed":0
},
{
"id":2260,
"client":"121",
"processed":0
},
{
"id":2424,
"client":"45",
"processed":0
}
],
"last_closed_tickets":[
{
"id":2259,
"client":"341",
"closed_on":"2017-06-25T10:11:00.000Z"
},
{
"id":2258,
"client":"48",
"closed_on":"2017-06-20T18:37:03.000Z"
}
],
"settings":{
"address":"belgium",
"email":"",
"daily_stats":0
},
"open_close_time":"161.1 T/h",
"avgopen_close_time":123298,
"ticket_time":"27.1 T/h",
"stats":{
"time":1498768200087,
"newest_ticket":1498768189000,
"closed_tickets":2200,
"open_tickets":13,
"active_workers":3
},
"avg_paid_tickets":64.55,
"avg_afterservice_tickets":35.45
}
This is the PHP code I tried to get the names of the worker but this doesn't work.
<?php
$string = file_get_contents("example.json");
$json = json_decode($string, true);
echo $json['address'];
foreach($json->workers->new as $entry) {
echo $entry->worker;
}
?>
If I try it like here below it works but then I've got to change the code everytime another employee starts.
echo $json['workers']['mark']['closed_tickets'];
<?php
$string = file_get_contents("example.json");
$json = json_decode($string, true);
foreach($json['workers'] as $entry){
echo $entry['worker'] . " has " . $entry['open_tickets'] . " tickets" . "\n";
}
?>
Related
I have problem with fetching json array that i send with post by android app.
PHP code :
<?php
$properties_json = json_decode($_POST['property'], true);
foreach ($properties_json->properties as $pro_element) {
echo $pro_element->property_id . '<br/>';
echo $pro_element->property_name . '<br/>';
echo $pro_element->property_value . '---------';
}
JSON array that i post :
{
"properties": [
{
"property_id": "654",
"property_name": "Gender",
"property_value": "Male"
},
{
"property_id": "655",
"property_name": "Name",
"property_value": "Amin"
},
{
"property_id": "656",
"property_name": "Mobile",
"property_value": "654-451-456"
}
]
}
Error :
Invalid argument supplied for foreach()
enter image description here
json_decode($_POST['property'], true); return an array. In your code you're using it as an object. Here is the proper way :
<?php
$properties_json = json_decode($_POST['property'], true);
foreach ($properties_json['properties'] as $pro_element) {
echo $pro_element['property_id'] . '<br/>';
echo $pro_element['property_name'] . '<br/>';
echo $pro_element['property_value'] . '---------';
}
EDIT:
You can check if $_POST['property'] exist and is not null.
<?php
if(isset($_POST['property'])){
if($_POST['property'] != null and $_POST['property'] != ""){
$properties_json = json_decode($_POST['property'], true);
foreach ($properties_json['properties'] as $pro_element) {
echo $pro_element['property_id'] . '<br/>';
echo $pro_element['property_name'] . '<br/>';
echo $pro_element['property_value'] . '---------';
}
}else{
echo "POST['property'] is empty";
}
}else{
echo "Missing POST['property']";
}
You reference $properties_json->properties as if it were an object, but you converted your JSON to an array by doing json_decode($_POST['property'], true); (see the documentation of json_decode)
You either need to change the true to false or do
foreach ($properties_json['properties'] as $pro_element) {
I am trying to read a json file in php, i can retrieve the root parts of the file, however whatever i try, i can not read the innner parts(child) of the json file, any help would be great
here is the json file
{
"orderId":"112-1567223-2156269x",
"legacyOrderItemId":"0218943273x4778",
"orderItemId":"2068965x7409001",
"asin":"B01K9RxxB0GQ",
"title":"xippro decs",
"merchantId":"A3H7UYG3T9xx6JDM",
"quantity":1,
"version3.0":{
"customizationInfo":{
"surfaces":[
{
"name":"Surface 1",
"areas":[
{
"colorName":"White",
"fontFamily":"Coppergate Bold",
"Position":{
"x":13,
"y":218
},
"name":"Line 1",
"Dimensions":{
"width":382,
"height":53
},
"label":"Your Text Here",
"fill":"#FFFFFF",
"customizationType":"TextPrinting",
"text":"Ruth's"
},
{
"colorName":"White",
"fontFamily":"Coppergate Bold",
"Position":{
"x":144,
"y":258
},
"name":"Customization 2",
"Dimensions":{
"width":119,
"height":17
},
"label":"Date (EST)",
"fill":"#FFFFFF",
"customizationType":"TextPrinting",
"text":"1969"
}
]
}
]
}
},
"customizationInfo":{
"aspects":[
{
"title":"Your Text Here",
"text":{
"value":"Ruth's"
},
"font":{
"value":"Coppergate Bold"
},
"color":{
"value":"#FFFFFF"
}
},
{
"title":"Date (EST)",
"text":{
"value":"1969"
},
"font":{
"value":"Coppergate Bold"
},
"color":{
"value":"#FFFFFF"
}
}
]
},
"version":"2.0"
}
and my php code is below
<?php
$file = file_get_contents('16532135318050.json', true);
$character = json_decode($file,false,400);
//print_r ($character);
echo $character->orderId . "<Br>";
echo $character->legacyOrderItemId . "<Br>";
echo $character->orderItemId . "<Br>";
echo $character->asin . "<Br>";
echo $character->merchantId . "<Br>";
echo $character->quantity . "<Br>";
echo $character->version3.0->customizationInfo->surfaces->areas[0]->colorName; // does not work
echo $character->version3.0->customizationInfo->surfaces->areas->colorName; // does not work
?>
Two issues:
version3.0 isn't a valid identifier - you should use {"version3.0"} instead.
surfaces is an array, so you should use surfaces[0]
this might work
$character->{"version3.0"}->customizationInfo->surfaces[0]->areas[0]->colorName
The reason it doesn't work is because $character->version3.0->customizationInfo->surfaces is an array and needs to be dereferenced accordingly:
$character->{'version3.0'}->customizationInfo->surfaces[0]->areas[0]->colorName
I'd like to print this json
i can print the first part with the actions
PHP:
$print= json_decode($output_data);
foreach($print->actions as $mydata)
{
echo $mydata->ID.'<br><br>';
}
JSON:
{
"actions": [
{
"ID":"Search",
"name":"Select"
}
],
"content": {
"TEST": "false",
"nickname": "brad"
}
}
but i cant print the content part to show the TEST and nickname content.
Can you please help me ?
Thanks
In the assumption you Json format is like this:
{
"actions" : [{
"ID" : "Search",
"name" : "Select"
}
],
"content" : {
"TEST" : "false",
"nickmane" : "brad"
}
}
You can do it like in next example:
$print= json_decode($output_data);
// Print all actions IDs:
foreach($print->actions as $mydata)
{
echo $mydata->ID . '<br><br>';
}
// Print TEST.
echo "TEST: " . $print->content->TEST . " Nickname: " . $print->content->nickname;
Also, if you need to dump all the JSON, try this:
$print = json_decode($output_data);
print_r($print);
Or this:
$print = json_decode($output_data);
$output = print_r($print, true);
echo $output;
You can read more about print_r() and other ways to dump variables here: http://php.net/manual/es/function.print-r.php
You can do it quite simply like this:
$print= json_decode($output_data);
echo $print->content->TEST;
echo "<br/>";
echo $print->content->nickmane;
The difference from the "actions" is that "actions" is an array whereas "content" is an object, so you don't need a loop.
Click here to run a demo of this code
Your JSON is not a valid format. I appears your JSON should be the following to do what you want:
{
"actions" : [{
"ID" : "Search",
"name" : "Select"
}
],
"content" : {
"TEST" : "false",
"nickmane" : "brad"
}
}
I am trying to get a data that is in an array inside another array, I did a search by the forum and google and I made several attempts without success.
It seems like an easy catch but I'm breaking my head all day and I can not.
I'm leaving below my JSON code and my last attempt to pass to PHP.
Thankful.
CODE JSON:
{
"ordens_de_servico": [
{
"oser_numero_os": 23932944,
"oser_nome_solicitante": "ED PI - CAMPO MAIOR",
"oser_dt_abertura": "27/03/2018",
"oser_pontos_refer_endereco": null,
"oser_observ_reclamacao": null,
"oser_prioridade": null,
"servico": {
"serv_cod_servico": 60,
"serv_descr_servico": "CORTE POR DEBITO"
},
"cliente": {
"nome": "ANTONIO WELTON DA SILVA OLIVEIRA",
"telefone": " "
},
"unidade_consumidora": {
"unid_ident_uc": 10945024,
"logr_nome_logr_expandido": null,
"medidor": "A2006171",
"latitude": " -4.711808",
"longitude": "-41.793455"
},
"faturas": [
{
"total_fatura": "23.01"
},
{
"total_fatura": "17.88"
},
{
"total_fatura": "23.01"
},
{
"total_fatura": "21.9"
},
{
"total_fatura": "22.92"
}
]
}
]
}
CODE PHP
<?php
// Read JSON file
$json = file_get_contents('oss.json');
//Decode JSON
$json_data = json_decode($json,true);
//Print data
print_r($json_data);
$os = $json_data['ordens_de_servico'][0]['oser_numero_os']. PHP_EOL;
$data = $json_data['ordens_de_servico'][0]['oser_dt_abertura']. PHP_EOL;
$cod_serv = $json_data['ordens_de_servico']['servico'][0]['serv_cod_servico']. PHP_EOL;
$total_fatura = $json_data['ordens_de_servico']['faturas'][0]['total_fatura']. PHP_EOL;
echo $os."<p>";
echo $data."<p>";
echo $cod_serv."<p>";
echo $total_fatura."<p>";
?>
I tried looping unsuccessfully on the fatura
$json_data = json_decode($json,false);
foreach ( $json_data->ordens_de_servico as $valor){
echo 'FATURA:'.$valor->faturas->total_fatura."<p>".PHP_EOL;
echo PHP_EOL;
}
At a minimum, you are missing the [0] on these two lines:
$cod_serv = $json_data['ordens_de_servico']['servico'][0]['serv_cod_servico']. PHP_EOL;
$total_fatura = $json_data['ordens_de_servico']['faturas'][0]['total_fatura']. PHP_EOL;
They need to be:
$cod_serv = $json_data['ordens_de_servico'][0]['servico']['serv_cod_servico']. PHP_EOL;
$total_fatura = $json_data['ordens_de_servico'][0]['faturas'][0]['total_fatura']. PHP_EOL;
Example of looping through elements in arrays:
foreach($json_data['ordens_de_servico'] as $key => $value){
echo $value["oser_numero_os"];
foreach($json_data['ordens_de_servico'][$key]['faturas'] as $index => $row){
}
}
<?php
$jsondata = file_get_contents('js/brand.json');
$data = json_decode($jsondata, true);
$menuonesublinks = $data['menuonesublinks']['links'];
foreach ($menuonesublinks as $menu_sublink) {
?>
<?php
echo $menu_sublink['title'];
?>
<?php
}
?>
o/p i am getting : usa,uk
how can i get inside subcities of city values ("subcities":[{"city":"dubai"},{'city':"london"}])
brand.json
{
"menuonesublinks": {
"links": [
{
"title": "usa",
"subcities":[{"city":"dubai"},{'city':"london"}]
},
{
"title": uk
}
]
}
}
You need to change your foreach loop in the following way,
// your code
foreach ($menuonesublinks as $menu_sublink) {
echo $menu_sublink['title'];
if(array_key_exists('subcities', $menu_sublink)){
foreach($menu_sublink['subcities'] as $subcity){
// Now access subcities like this: $subcity['city']
}
}
}
Here's the relevant reference:
http://php.net/manual/en/function.array-key-exists.php