PHP Json Кодирование массива - PullRequest
1 голос
/ 05 марта 2011

Я новичок в PHP (также JSON в этом отношении), но я не уверен / не уверен в формате данных json, которые у меня есть. Я преобразую MySQL в JSON для использования в другом приложении, и формат, который я получаю, выглядит следующим образом:

    [
     {
        "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":""
        }
    },
    ...
]

и пр.

Теперь я не уверен, что это правильный формат, но мой код для генерации выглядит следующим образом:

            <?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);
            ?>

Исходя из моего кода, я делаю это правильно? Правильно ли преобразован массив в JSON?

Ответы [ 2 ]

6 голосов
/ 05 марта 2011

json_encode () создаст допустимый JSON.При необходимости вы можете убедиться в этом сами, скопировав и вставив выходные данные JSON в онлайн-валидатор, такой как http://www.jsonlint.com/

Если вы не уверены, помещают ли ваши данные в массивс правильной организацией , это другое дело.Но при наличии действительного массива / объекта PHP / практически любого другого объекта, json_encode () будет правильно его кодировать в формате JSON.

РЕДАКТИРОВАТЬ: Внутри цикла while этот код:

        while($category = mysql_fetch_assoc($result)) {
          $categories[] = array('category'=>$category);
        }

Создает массив, который выглядит следующим образом: ("category" => [$ catId, $ categoryName и т. Д.], "Category" => [$ catId, $ categoryName и т. Д.] И т. Д.) Я думаю, вы быбудет лучше (и счастливее с созданным JSON), если вы измените его на:

        while($category = mysql_fetch_assoc($result)) {
          $categories[] = $category;
        }

Исходный код добавляет каждую категорию в массив $ Categories с одним и тем же ключом "category".Но так как этот ключ дублируется для каждой категории, он не служит никакой реальной цели.

0 голосов
/ 05 ноября 2013
if(isset($_GET['catid']) && intval($_GET['catid'])) {
  $query.="AND c.id = ";
  $query.= $_GET['catid'];
}

НИКОГДА, просто НИКОГДА не делай так !!!Сначала прочитайте что-нибудь о SQL-инъекции!
Вы просто проверяете, не является ли intval параметра GET 0. 0. 1003 * Но может быть что угодно!Например, строка «5 union select version (), user () и т.д .... - q»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...