homepage Welcome to WebmasterWorld Guest from 54.205.106.111
register, free tools, login, search, pro membership, help, library, announcements, recent posts, open posts,
Become a Pro Member

Home / Forums Index / Code, Content, and Presentation / PHP Server Side Scripting
Forum Library, Charter, Moderators: coopster & jatar k

PHP Server Side Scripting Forum

    
JSONReader code not working
PHP and JSONReader to parse large json file
Dlo2418




msg:4670894
 2:14 am on May 14, 2014 (gmt 0)

I am trying to use JSONReader (along with PHP & XPATH) to parse a very large JSON file, then display search results. A stream parser (such as JSONREader) is recommended over JSON_decode when parsing large files. This simple code below is not displaying any results (in the echo statements). Any advice is greatly appreciated.

$reader = new JSONReader();
$reader->open('products.json');
$dom = new DOMDocument;
$xpath = new DOMXpath($dom);

while ($reader->read() && $reader->name !== 'product') {
continue;
}

while ($reader->name === 'product') {
$node = $dom->importNode($reader->expand(), TRUE);

$name = $xpath->evaluate('string(name)', $node);
$price = $xpath->evaluate('string(price)', $node);
echo "Name: " . $name . ". ";
echo "Price: " . $price . ". ";

$reader->next('product');
}


Here is a snippet of the JSON file:
{
"products": {
"product" : [
{ "name" : "Dell 409", "price" : 499.99},
{ "name" : "HP Lap top", "price" : 599.99},
{ "name" : "Compaq 11", "price" : 299.99}


] }}

 

penders




msg:4671054
 3:08 pm on May 14, 2014 (gmt 0)

Pardon my ignorance but I'm not familiar with JSONReader - do you have a link to the docs?

$reader->name


Presumably "name" is a special JSONReader property referencing the current JSON property name? Or is it intended to be a reference to the "name" property in your JSON string?

Dlo2418




msg:4671137
 11:45 pm on May 14, 2014 (gmt 0)

"name" is the element from the json file.

penders




msg:4671600
 8:49 am on May 16, 2014 (gmt 0)

In that case your code does not look correct.

$reader->name


If "name" is intended to refer to the "name" element in the JSON string then this would seem to assume that "name" is a root level element, which it is not. "name" is a property in an object in the "product" array, which is itself an element of the "products" object.

(Although TBH your code suggests that "->name" is a reference to the current element?)

Which JSONReader are you using? This one...?
https://github.com/shevron/ext-jsonreader

Global Options:
 top home search open messages active posts  
 

Home / Forums Index / Code, Content, and Presentation / PHP Server Side Scripting
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Home ¦ Free Tools ¦ Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About ¦ Library ¦ Newsletter
WebmasterWorld is a Developer Shed Community owned by Jim Boykin.
© Webmaster World 1996-2014 all rights reserved