PHP Json Encoding an array
Im a newbie in PHP (also JSON for that matter) but I am not sure/confident of the format of the json data i have. I am converting a mysql into json for use in another application, and the format i am getting is as follows:
[
{
"category":
{
"catId":"1",
"categoryName":"BABY FOOD",
"categoryNotes":"ONLY baby food varieties which have been listed below should be used. However if your doctor or pediatrician requires a specific diet please contact your Rabbi for further advice."
}
},
{
"category":
{
"catId":"2",
"categoryName":"BAKING INGREDIENTS",
"categoryNotes":""
}
},
{
"category":
{
"catId":"131",
"categoryName":"BEER",
"categoryNotes":"See Alcoholic Drinks"
}
},
{
"category":
{
"catId":"4",
"categoryName":"BEVERAGES - Powdered",
"categoryNotes":""
}
},
{
"category":
{
"catId":"5",
"categoryName":"BISCUITS",
"categoryNotes":"Locally produced biscuits usually contain fats, oils or improvers of non-kosher origin. There is a very large range of Israeli, South African and American kosher biscuits available locally. Even these imported biscuits and crackers (including Israeli produced goods) should only be used if marked with a reliable Rabbinic Hechsher. A 'K' on the packet alone is insufficient. Please note which products are dairy or pareve."
}
},
{
"category":
{
"catId":"6",
"categoryName":"BREAD AND BAKERY GOODS",
"categoryNotes":"Bread usually contains or comes in contact with Non-Kosher oils, fats or improvers and cannot be accepted as kosher without thorough investigation and subsequent authorisation"
}
},
{
"category":
{
"catId":"7",
"categoryName":"BREAD\/CORN\/RICE CRUMBS",
"categoryNotes":""
}
},
{
"category":
{
"catId":"8",
"categoryName":"BUTTER AND DAIRY BLENDS",
"categoryNotes":"Soft butters, butter spreads & dairy blends are NOT ACCEPTABLE unless specifically listed. Butter made from whey cream is NOT ACCEPTABLE unless produced under Rabbinic supervision"
}
},
{
"category":
{
"catId":"9",
"categoryName":"BUTTERMILK and LEBEN ",
"categoryNotes":""
}
},
{
"category":
{
"catId":"10",
"categoryName":"CAKES & CAKE SHOPS",
"categoryNotes":"Cakes and cake mixes usually contain Non-Kosher ingredients, and must only be used if they are produced under supervision <br\/> Cakes bought in a Non-Kosher cake shop, even if containing only kosher ingredients are NOT ACCEPTABLE because of the Non-Kosher utensils used in their preparation"
}
},
{
"category":
{
"catId":"11",
"categoryName":"CEREALS ",
"categoryNotes":""
}
},
...
]
and so forth.
Now I am not sure if this is the right format, but my code to generate this is as follows:
<?php
/* soak in the passed variable or set our own */
// $approved_prod_date = $_GET['date'];
$link = mysql_connect('localhost','root','broncos') or die('Cannot connect to the DB');
mysql_select_db('iKosher',$link) or die('Cannot select the DB');
/* grab the categories from the db */
$query= "SELECT c.id as catId, c.name as categoryName, c.notes as categoryNotes
FROM cat c
WHERE 1=1\n";
if(isset($_GET['catid']) && intval($_GET['catid'])) {
$query.="AND c.id = ";
$query.= $_GET['catid'];
}
if(isset($_GET['startIndex']) && intval($_GET['startIndex'])) {
if(isset($_GET['numItems']) && intval($_GET['numItems'])) {
$query .= "\nLIMIT ";
$query .= $_GET['startIndex'];
$query .= ",";
$query .= $_GET['numItems'];
}
}
// $query = "SELECT post_title, guid FROM wp_posts WHERE post_author = $user_id AND post_status = 'publish' ORDER BY ID DESC LIMIT $number_of_posts";
$result = mysql_query($query,$link) or die('Errant query: '.$query);
$num=mysql_numrows($result);
/* create one master array of the records */
$categories = array();
if($num) {
while($category = mysql_fetch_assoc($result)) {
$categories[] = array('category'=>$category);
}
}
header('Content-type: application/json');
echo json_encode($categories);
开发者_StackOverflow社区 ?>
Based on my code, am i doing this right? Is the array converted correctly into JSON?
json_encode() will produce valid JSON. If necessary, you can verify this for yourself by copy-and-pasting the JSON output into an online validator like the one at http://www.jsonlint.com/
If you're not sure if your data is being placing into the array with the correct organization, that's another matter. But given a valid PHP array/object/pretty much whatever, json_encode() will produce it encoded properly in the JSON format.
EDIT: Inside your while loop, this code:
while($category = mysql_fetch_assoc($result)) {
$categories[] = array('category'=>$category);
}
Builds an array that looks like this: ("category" => [$catId, $categoryName, etc.], "category" => [$catId, $categoryName, etc], and so on) I think you'd be better off (and happier with the JSON produced) if you changed it to:
while($category = mysql_fetch_assoc($result)) {
$categories[] = $category;
}
The original code is adding each and every category to the $categories array with the same "category" key. But since this key is duplicated for each category, it serves no real purpose.
if(isset($_GET['catid']) && intval($_GET['catid'])) {
$query.="AND c.id = ";
$query.= $_GET['catid'];
}
NEVER, just NEVER do like this!!! Read something about SQL-injection first!
You just check if intval of GET-parameter is not 0.
But there can be anything! For example a string "5 union select version(), user(), etc .... -- q"
精彩评论