如何在PHP中将数组的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

我有一个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
      }
   ]
}
使用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
内容不是我知道的任何标准格式。您必须自己解析它。好的,我会解析它