$product_name appears to be a category/type value. You should have a category table, with id (auto-increment integer primary index) and name columns. This will define the category id values. You would store the category id, rather than the category name for any data associated with a category.
$product_id values should be unique (your example data is duplicating 1, 2, and 4.) All the product information should be defined in a one table, with id (auto-increment integer primary index), category_id, name, and description columns. This will define the product id values. To get the category name for any product, you would write a JOIN query between the product table and the category table, ON the appropriate category id columns.
$number_of_product appears to be the quantity?
One of the main points of JSON, is that it is a standard data exchange format, so that different systems can easily parse/decode data sent between them. Using it within a single system, just adds two unnecessary layers of processing to what you are doing. Since the data is just being used within your system, don’t bother using JSON when storing the data in a database table.
When someone browses to and selects products and their quantities, they are adding these choices to a ‘shopping’ cart. When they are satisfied with the choices in the cart, they submit the cart to become a (pending) order.
To store this data, you should have an order table, that will hold the unique/one-time information about each order with a minimum of an id (auto-increment integer primary index) and user_id columns. The id column defines the order_id, that will be used to associate all other data back to the order it belongs to. The user_id indicates who placed the order.
If all items in the order will always be shipped to the same location, you would have a ship_to_id column in this table.
Next, you would have an order_item table, with a minimum of an id (auto-increment integer primary index), order_id, product_id, and quantity columns. You would insert a separate row in this table for each product_id that is part of an order. If each item in an order can be shipped to a separate location, you would have a ship_to_id column in this table.
You would also have a order_status table, with a minimum of an id (auto-increment integer primary index), order_id, datatime, status_id, and (probably a) memo columns. This table will track each change made to the order, such as when it was submitted as a pending order, when it was quoted, when it was accepted and became a active order, when it was invoiced, …