如何解码Google跟踪代码管理器JSON

时间:2019-11-18 08:56:23

标签: php json google-tag-manager

我正在使用Google跟踪代码管理器库来获取帐户中的所有代码。我从https://www.googleapis.com/discovery/v1/apis/tagmanager/v2/rest获取JSON数据。此JSON对我不起作用,我无法使用PHP对其进行解码。

示例:

{ 
   "tag":[ 
      { 
         "path":"tags/1",
         "accountId":"1"
      },
      { 
         "path":"tags/2",
         "accountId":"1"
      }
   ],
   "tag":[ 
      { 
         "path":"tags/1",
         "accountId":"2"
      },
      { 
         "path":"tags/2",
         "accountId":"2"
      }
   ],
   "tag":[ 
      { 
         "path":"tags/1",
         "accountId":"3"
      }
   ]
}

并在json debugger website上对其进行测试,我遇到错误Duplicate key, names should be unique.

如何修复此JSON以使其与PHP json_decode($json, true)一起使用?

先前的丑陋代码

$json = str_replace('\n', '', $get_json);
$json = preg_replace('/\s+/', ' ', $json);
$json = str_replace('}{}{', ',', $json);
$json = str_replace('}{', ',', $json);
$json = str_replace('"tag": [', '"tag": ', $json);
$json = str_replace('} } ]', '} } }', $json);
$json = str_replace('tag":', 'tag_manage":', $json);
$json = str_replace('tag_manage', 'tag_manage', $json);
$json = preg_replace('/tag_manage/', 'tag_1_manage', $json, 1);
$json = preg_replace('/tag_manage/', 'tag_2_manage', $json, 1);
$json = preg_replace('/tag_manage/', 'tag_3_manage', $json, 1);

2 个答案:

答案 0 :(得分:0)

您具有一个称为x的对象的多个属性。像

tag

应该工作。

答案 1 :(得分:0)

您已经发现JSON不正确-就像在PHP中使用一个对象,其中包含多个变量都称为tag。您的JSON应该将所有数据都放在一个tag元素下,就像...

{ 
   "tag":[ 
      { 
         "path":"tags/1",
         "accountId":"1"
      },
      { 
         "path":"tags/2",
         "accountId":"1"
      },
      { 
         "path":"tags/1",
         "accountId":"2"
      },
      { 
         "path":"tags/2",
         "accountId":"2"
      },
      { 
         "path":"tags/1",
         "accountId":"3"
      }
   ]
}

更改它的代码将对此进行更新(一旦现有数据正确即可)……。

// Fetch existing data
$json = file_get_contents("a.json");
// Decode data to array format
$tags = json_decode($json, true );
// Add new tag into the data
$tags['tag'][] = ["path" => "tags/1", "accountId" => "4"];
// Create new JSON encoded string
$newJson = json_encode($tags, JSON_PRETTY_PRINT);