Akash Goyal
Akash Goyal

Reputation: 1303

json data into php variables

I have to parse this json data using PHP and store the values into PHP variables.

{  
"sender": "[email protected]",  
"receiver": "[email protected]",  
"msg_id": "[email protected]",   
"subject": "Group Discussion",   
"references": ["[email protected]","[email protected]","[email protected]"]
}

I am using this PHP code, its not working; pls check it.

For the fields 'sender', 'receiver', 'msg_id'and 'subject, I am using PHP variables '$msg_id', '$sender', '$receiver' and '$subject'.
I am trying to store the data of 'references' in the array 'ref_id'.

Also, the file 'dataset_f.json' has content in the following way:

{ "sender":"[email protected]","receiver":"[email protected]","msg_id":"[email protected]","subject": "Project Discussion","references":["[email protected]","[email protected]","[email protected]"]}

{ "sender":"[email protected]","receiver":"[email protected]","msg_id":"[email protected]","subject": "Project Discussion","references":["[email protected]","[email protected]","[email protected]"]}

Thats why the php code is reading the file line by line

<?php
$h1 = fopen("dataset_f.json", "r");
while(!feof($h1)){
$line = fgets($h1);
$test_case = json_decode($line);

$ref_id = array();
$msg_id = $test_case->{'msg_id'};
$sender = $test_case->{'sender'};
$receiver = $test_case->{'receiver'};
$subject = $test_case->{'subject'};
foreach($test_case as $val)
 {
    foreach($val -> references as $refer)
    {
        array_push($ref_id, $refer->ref);
    }
 }

// printing the values
$arrlen=count($ref_id);
 for($x=0;$x<$arrlen;$x++)
 { echo $ref_id[$x]." "; }
echo $msg_id." ".$sender." ".$receiver." ".$subject." <br> ";

}
?>

Upvotes: 0

Views: 9753

Answers (1)

user3587554
user3587554

Reputation: 353

Store the whole file as a string, decode it and store the values in you variables. Show the json your using. your using the -> incorrect, thats for objects not arrays, json_decode() returns an associative array if the next param is true. ref_id will hold a string thats comma separated.

dataset_f.json

{
    "sender":"[email protected]",
    "receiver":"[email protected]",
    "msg_id":"[email protected]",
    "subject":"Group Discussion",
    "references":["[email protected]","[email protected]","[email protected]"]
}

php code

$json = file_get_contents("dataset_f.json");

$data = json_decode($json, true);

// here depends on the json

$ref_id = ( ( is_array( $data["references"] ) ? implode(", ", $data["references"]) : $data["references"] ) ); // array to string
$msg_id = $data["msg_id"];
$sender = $data["sender"];
$receiver = $data["receiver"];
$subject = $data["subject"];

Upvotes: 8

Related Questions