如何在PHP中将数组的json值解码到数组中
我有一个json文件如何在PHP中将数组的json值解码到数组中,php,arrays,json,Php,Arrays,Json,我有一个json文件 { "GetProductsByCategoryResult":[ { "Brand":"Bohra", "CategoryName":"[[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Ki
{
"GetProductsByCategoryResult":[
{
"Brand":"Bohra",
"CategoryName":"[[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Kitchen Appliances}, {nodeId=20110, nodeName=Electric Jug(heater)\/Travel Kettles}]]",
"CategoryPathAsString":"Root|[[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Kitchen Appliances}, {nodeId=20110, nodeName=Electric Jug(heater)\/Travel Kettles}]]|",
"Colour":null,
"Custom1":"40",
"Custom2":"0",
"Custom3":null,
"Custom4":null,
"Custom5":null,
"DiscountedPrice":0.00,
"Location":null,
"MID":678106,
"MPN":null,
"MerchantName":"Flipkart",
"PID":13653,
"ProductDescription":"Ideal for boiling water, maggie this electric kettle from Bohra Mrketing is a necessity for every household.",
"ProductID":123802338,
"ProductImageLargeURL":"http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-400x400-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-75x75-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-275x275-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-125x125-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-40x40-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-original-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-1100x1100-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-100x100-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-200x200-imae4dcyxpvrbqbu.jpeg;",
"ProductImageMediumURL":null,
"ProductImageSmallURL":null,
"ProductName":"Bohra Bht013 Rose 1 L Electric Kettle",
"ProductPrice":1599.00,
"ProductPriceCurrency":"INR",
"ProductSKU":"EKTE73GBRPMVYWNH",
"ProductURL":"http:\/\/clk.omgt5.com\/?AID=861823&PID=13653&Type=12&r=http:\/\/dl.flipkart.com\/dl\/bohra-bht013-rose-1-l-electric-kettle\/p\/itme73gbhjxf5hty%3Fpid%3DEKTE73GBRPMVYWNH",
"StockAvailability":"In stock",
"WasPrice":2700.00
}
]
}
使用foreach循环在数组中解码后,如下所示:
Array(
[0] => Array
(
[Brand] => Westinghouse
[CategoryName] => [[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Kitchen Appliances}, {nodeId=20110, nodeName=Electric Jug(heater)/Travel Kettles}]]
[CategoryPathAsString] => Root|[[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Kitchen Appliances}, {nodeId=20110, nodeName=Electric Jug(heater)/Travel Kettles}]]|
[Colour] =>
[Custom1] => 15
[Custom2] => 0
[Custom3] =>
[Custom4] =>
[Custom5] =>
[DiscountedPrice] => 0
[Location] =>
[MID] => 678106
[MPN] =>
[MerchantName] => Flipkart
[PID] => 13653
[ProductDescription] =>
[ProductID] => 123803505
[ProductImageLargeURL] => http://img5a.flixcart.com/image/electric-kettle/e/c/4/westinghouse-k708-k708-original-imad7ywryyk4rjjk.jpeg;http://img5a.flixcart.com/image/electric-kettle/e/c/4/westinghouse-k708-k708-400x400-imad7ywryyk4rjjk.jpeg;http://img5a.flixcart.com/image/electric-kettle/e/c/4/westinghouse-k708-k708-75x75-imad7ywryyk4rjjk.jpeg;http://img6a.flixcart.com/image/electric-kettle/e/c/4/westinghouse-k708-k708-275x275-imad7ywryyk4rjjk.jpeg;http://img5a.flixcart.com/image/electric-kettle/e/c/4/westinghouse-k708-k708-125x125-imad7ywryyk4rjjk.jpeg;http://img5a.flixcart.com/image/electric-kettle/e/c/4/westinghouse-k708-k708-40x40-imad7ywryyk4rjjk.jpeg;http://img5a.flixcart.com/image/electric-kettle/e/c/4/westinghouse-k708-k708-100x100-imad7ywryyk4rjjk.jpeg;http://img6a.flixcart.com/image/electric-kettle/e/c/4/westinghouse-k708-k708-200x200-imad7ywryyk4rjjk.jpeg;
[ProductImageMediumURL] =>
[ProductImageSmallURL] =>
[ProductName] => Westinghouse K708 2 Electric Kettle
[ProductPrice] => 2278
[ProductPriceCurrency] => INR
[ProductSKU] => EKTD7YPQ9NHFTEC4
[ProductURL] => http://clk.omgt5.com/?AID=861823&PID=13653&Type=12&r=http://dl.flipkart.com/dl/westinghouse-k708-2-electric-kettle/p/itmd7yprd38phkch%3Fpid%3DEKTD7YPQ9NHFTEC4
[StockAvailability] => Out of stock
[WasPrice] => 2690
)
)
现在,我如何单独解码和显示CategoryName的节点名。CategoryName内容并不像Niet the Dark Absol所说的那样是任何标准格式
下面是获取节点ID和类别名称的方法。恐怕这不是最好的办法,但我想说这只是为了帮助你
$json_data='{“GetProductsByCategoryResult”:[{“Brand”:“Bohra”,“CategoryName”:“[{nodeId=20001,nodeName=FLIPKART\u TREE},{nodeId=20007,nodeName=Electronics},{nodeId=20268,nodeName=Appliances},{nodeId=20098,nodeName=Kitchen Appliances},{nodeId=20110,nodeName=Electric Jug(heater)\/Travel Kettles}],“CategoryPasstring”根|[[{nodeId=20001,nodeName=FLIPKART_TREE},{nodeId=20007,nodeName=Electronics},{nodeId=20268,nodeName=Appliances},{nodeId=20098,nodeName=Kitchen Appliances},{nodeId=20110,nodeName=Electric Jug(heater)\/旅行水壶}]],“颜色”:null,“客户1”:“40”,“客户2”:“0”,“客户3”:null,“客户4”:null,“客户5”:null,“折扣价格”:0.00,“位置”:null,“MID”:678106,“MPN”:null,“商品名称”:“Flipkart”,“PID”:13653,“产品描述”:“玛吉,这是煮开水的理想选择,Bohra Mrketing的电热壶是每个家庭的必需品。”,“ProductID”:123802338,“ProductImageLargeURL”:"目前,英国的“波拉拉拉图-布布托13-罗斯-400x400-IMAE4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-4-维维维维维维维维维维维维维维维维维维维弗利克斯卡rt.com\/image\/electric cattle\/w\/n\/h\/bohra-bht013-rose-125x125-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric cattle\/w\/w\/n\/h\/bohra-bht013-rose-40x40-imae4dcyxpvrbqbu.jpeg;http:\/\/imbog6a.flixcart.com\/image\/electric cattle\/w\/n\/h\/h\/jpeg-bht013-bh13-rose-40x40-imyxpvxxxqbu.flixcart\/flixcart.com\/flixcartric Ketter\/w\/n\/h\/bohra-bht013-rose-1100x1100-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric Ketter\/w\/n\/n\/h\/h\/bohra-bht013-rose-100x100-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric Ketter\/w\/n\/h\/h\/h\/bht013-rose-200x200-IMAGEVxPvYxPvRbQbu.jpeg;http:///imgGbUmbu.html;“:”图片网址:http:/“:null,“产品名称”:“Bohra Bht013 Rose 1 L电水壶”,“产品价格”:1599.00,“产品价格货币”:“INR”,“产品SKU”:“EKTE73GBRPMVYWNH”,“产品URL”:“http:\/\/clk.omgt5.com\/?AID=861823&PID=13653&Type=12&r=http:\/\/dl.flipkart.com\/dl\/Bohra-Bht013-Rose-1-L-Electric-Kettle\/p\/ITME73GBHJJ5HTY%3FPEK73GBKf5HTY”,“可用性”:“库存”、“价格”:2700.00}]};
$array\u data=json\u decode($json\u data,true);
//获取变量中的类别名称数据
$category_data=$array_data['GetProductsByCategoryResult'][0]['CategoryName'];
//分别从字符串的开头和结尾删除“['&&”]]”字符串
$category_data=str_replace(“[]”,“$category_data”);
$category_data=str_replace(']]','$category_data);
//按“}”提取(分解)所有行
$cat_数组=分解(“},”,$category_数据);
//按for循环获取所有行
foreach($key=>$cRow的cat_数组){
//按“nodeName=”提取(分解)类别名称行
$node_array=explode(“nodeName=”,$cRow);
//从提取的数组中获取nodeId
$nodeId=$node_数组[0];
//从提取的数组中获取类别名称
$cat_name=$node_数组[1];
//从字符串中删除'nodeId',',','{'&'}'字符
$nodeId=str_replace('nodeId=','','',$nodeId);
$nodeId=str_replace('{','$nodeId);
$nodeId=str_replace('{','$nodeId);
$nodeId=str_replace(“,”,“,”$nodeId);
//从字符串中删除{'&'}'
$cat_name=str_replace('{','$cat_name);
$cat_name=str_replace('}','$cat_name);
//显示节点Id和类别名称
回显“节点:”;
echo$nodeId;
回声';
echo“类别名称:”;
echo$cat_name;
回声“
”;
}
使用一些regexp
可以将字符串
转换为正确的json
格式,然后对其进行解码:
PHP代码
$json = '{"GetProductsByCategoryResult":[{"Brand":"Bohra","CategoryName":"[[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Kitchen Appliances}, {nodeId=20110, nodeName=Electric Jug(heater)\/Travel Kettles}]]","CategoryPathAsString":"Root|[[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Kitchen Appliances}, {nodeId=20110, nodeName=Electric Jug(heater)\/Travel Kettles}]]|","Colour":null,"Custom1":"40","Custom2":"0","Custom3":null,"Custom4":null,"Custom5":null,"DiscountedPrice":0.00,"Location":null,"MID":678106,"MPN":null,"MerchantName":"Flipkart","PID":13653,"ProductDescription":"Ideal for boiling water, maggie this electric kettle from Bohra Mrketing is a necessity for every household.","ProductID":123802338,"ProductImageLargeURL":"http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-400x400-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-75x75-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-275x275-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-125x125-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-40x40-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-original-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-1100x1100-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-100x100-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-200x200-imae4dcyxpvrbqbu.jpeg;","ProductImageMediumURL":null,"ProductImageSmallURL":null,"ProductName":"Bohra Bht013 Rose 1 L Electric Kettle","ProductPrice":1599.00,"ProductPriceCurrency":"INR","ProductSKU":"EKTE73GBRPMVYWNH","ProductURL":"http:\/\/clk.omgt5.com\/?AID=861823&PID=13653&Type=12&r=http:\/\/dl.flipkart.com\/dl\/bohra-bht013-rose-1-l-electric-kettle\/p\/itme73gbhjxf5hty%3Fpid%3DEKTE73GBRPMVYWNH","StockAvailability":"In stock","WasPrice":2700.00}]}';
$obj = json_decode($json);
$str = $obj->{'GetProductsByCategoryResult'}[0]->{'CategoryName'};
$obj->{'GetProductsByCategoryResult'}[0]->{'CategoryName'} = json_decode( '[' . preg_replace( ['/([^=\[\],\s\{\}]+)=([^=\[\],\{\}]+)/', '/(Root|\||\[|\])/'], ['"$1":"$2"'], $str ) . ']' );
$str = $obj->{'GetProductsByCategoryResult'}[0]->{'CategoryPathAsString'};
$obj->{'GetProductsByCategoryResult'}[0]->{'CategoryPathAsString'} = json_decode( '[' . preg_replace( ['/([^=\[\],\s\{\}]+)=([^=\[\],\{\}]+)/', '/(Root|\||\[|\])/'], ['"$1":"$2"'], $str ) . ']' );
CategoryName
属性将具有以下值:
类别名称的值:
Array
(
[0] => stdClass Object
(
[nodeId] => 20001
[nodeName] => FLIPKART_TREE
)
[1] => stdClass Object
(
[nodeId] => 20007
[nodeName] => Electronics
)
[2] => stdClass Object
(
[nodeId] => 20268
[nodeName] => Appliances
)
[3] => stdClass Object
(
[nodeId] => 20098
[nodeName] => Kitchen Appliances
)
[4] => stdClass Object
(
[nodeId] => 20110
[nodeName] => Electric Jug(heater)/Travel Kettles
)
)
使用相同的RegExp
还可以解码CategoryPathAsString
属性:
可选PHP代码
$json = '{"GetProductsByCategoryResult":[{"Brand":"Bohra","CategoryName":"[[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Kitchen Appliances}, {nodeId=20110, nodeName=Electric Jug(heater)\/Travel Kettles}]]","CategoryPathAsString":"Root|[[{nodeId=20001, nodeName=FLIPKART_TREE}, {nodeId=20007, nodeName=Electronics}, {nodeId=20268, nodeName=Appliances}, {nodeId=20098, nodeName=Kitchen Appliances}, {nodeId=20110, nodeName=Electric Jug(heater)\/Travel Kettles}]]|","Colour":null,"Custom1":"40","Custom2":"0","Custom3":null,"Custom4":null,"Custom5":null,"DiscountedPrice":0.00,"Location":null,"MID":678106,"MPN":null,"MerchantName":"Flipkart","PID":13653,"ProductDescription":"Ideal for boiling water, maggie this electric kettle from Bohra Mrketing is a necessity for every household.","ProductID":123802338,"ProductImageLargeURL":"http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-400x400-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-75x75-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-275x275-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-125x125-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-40x40-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-original-imae4dcyxpvrbqbu.jpeg;http:\/\/img5a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-1100x1100-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-100x100-imae4dcyxpvrbqbu.jpeg;http:\/\/img6a.flixcart.com\/image\/electric-kettle\/w\/n\/h\/bohra-bht013-rose-200x200-imae4dcyxpvrbqbu.jpeg;","ProductImageMediumURL":null,"ProductImageSmallURL":null,"ProductName":"Bohra Bht013 Rose 1 L Electric Kettle","ProductPrice":1599.00,"ProductPriceCurrency":"INR","ProductSKU":"EKTE73GBRPMVYWNH","ProductURL":"http:\/\/clk.omgt5.com\/?AID=861823&PID=13653&Type=12&r=http:\/\/dl.flipkart.com\/dl\/bohra-bht013-rose-1-l-electric-kettle\/p\/itme73gbhjxf5hty%3Fpid%3DEKTE73GBRPMVYWNH","StockAvailability":"In stock","WasPrice":2700.00}]}';
$obj = json_decode($json);
$str = $obj->{'GetProductsByCategoryResult'}[0]->{'CategoryName'};
$obj->{'GetProductsByCategoryResult'}[0]->{'CategoryName'} = json_decode( '[' . preg_replace( ['/([^=\[\],\s\{\}]+)=([^=\[\],\{\}]+)/', '/(Root|\||\[|\])/'], ['"$1":"$2"'], $str ) . ']' );
$str = $obj->{'GetProductsByCategoryResult'}[0]->{'CategoryPathAsString'};
$obj->{'GetProductsByCategoryResult'}[0]->{'CategoryPathAsString'} = json_decode( '[' . preg_replace( ['/([^=\[\],\s\{\}]+)=([^=\[\],\{\}]+)/', '/(Root|\||\[|\])/'], ['"$1":"$2"'], $str ) . ']' );
转换为哪种语言的数组?请参阅和。请提供您的整个JSON和所需的数组输出CategoryName
内容不是我知道的任何标准格式。您必须自己解析它。好的,我会解析它