我正在使用从C#应用程序进入php的多级JSON数据,如:
return new RootObject()
{
ID_Project = 4,
Name_Project = "Test",
Receiver_ID = 4,
Receiver_Name = "ABCDE",
UserID = 20,
UserRole = new User_Role()
{
ID_User = 20,
Role_User = "level 3",
User_Role_Description = "U",
UserGroup = new List<user_group>()
{
new User_Group() { ID_UserGroup = 30, Name_UserGroup = "usergroup8", UserID = 20 },
new User_Group() { ID_UserGroup = 31, Name_UserGroup = "usergroup9", UserID = 21 },
new User_Group() { ID_UserGroup = 32, Name_UserGroup = "usergroup10", UserID = 22 }
}
}
};
我遇到了访问第二级的麻烦:UserRole和第三级:我的PHP脚本中的User_Group。 我目前正在尝试这样:
foreach ($phpArray as $key => $value) {
echo "<h2>$key</h2>";
foreach ($value as $k => $v) {
echo "$k | $v
";
foreach ($v as $key1) {
echo "$key1
";
}
}
}
PHP中的新版本:(编辑后)
//connect to the database
$con = mysqli_connect("localhost","userid","password","database");
if (mysqli_connect_errno()) {
echo 'Failed to connect to MySQL: ' . mysqli_connect_error();
exit();
};
$jsonData = file_get_contents("JSON_File.json");
$phpArray = json_decode($jsonData);
$userRole = $phpArray->UserRole;
$userGroups = $phpArray->UserRole->UserGroup;
$id_project=$phpArray->ID_Project;
$name_project=$phpArray->Name_Project;
$id_receiver=$phpArray->Receiver_ID;
$name_receiver=$phpArray->Receiver_Name;
$userid=$phpArray->UserID;
$id_user=$phpArray->UserRole->ID_User;
$role_user=$phpArray->UserRole->Role_User;
$role_user_description=$phpArray->UserRole->User_Role_Description;
$sqlStr = "INSERT INTO project (`ID_Project`,`Name_Project`,`Receiver_ID`,`Receiver_Name`,`UserID`) VALUES ($id_project, '$name_project',$id_receiver,'$name_receiver',$userid);" ;
$sqlStr.= "INSERT INTO user_role (`ID_User`,`UserRole`,`User_Role_Description`) VALUES ($id_user,'$role_user','$role_user_description');" ;
foreach($userGroups as $userGroup) {
$id_usergroup=$userGroup->ID_UserGroup;
$name_usergroup=$userGroup->Name_UserGroup . PHP_EOL;
$userid=$userGroup->UserID . PHP_EOL;
$sqlStr.= "INSERT INTO user_group (`ID_UserGroup`,`Name_UserGroup`,`UserID`) VALUES ($id_usergroup, '$name_usergroup',$userid)" ;
}
if (mysqli_multi_query($con, $sqlStr)) {
do {
/* store first result set */
if ($result = mysqli_store_result($con)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
//check the outcome
/* print divider */
if (mysqli_more_results($con)) {
printf("-----------------\n");
}
} while (mysqli_next_result($con));
}
编辑:我在访问第3级数据元素时遇到问题。 例如,我可以获得值超过Project-&gt; Stand_Orte-&GT; MODUL。但在那个项目之后 - &gt; Stand_Orte-&GT; Modul-&GT; MessKanal在PHP中引发错误,因为&#34;试图获得非对象的属性&#34;
C#中的JSON类结构如下:
public class User_Group
{
public int ID_UserGroup { get; set; }
public string Name_UserGroup { get; set; }
public int UserID { get; set; }
}
public class User_Role
{
public int ID_User { get; set; }
public string Role_User { get; set; }
public string User_Role_Description { get; set; }
public List<User_Group> UserGroup { get; set; }
}
public class Stand_Orte
{
public int ID { get; set; }
public string Bezeichnung { get; set; }
public List<Modul> modul { get; set; }
}
public class Modul
{
public string ID { get; set; }
public string Seriennummer { get; set; }
public string Bezeichnung { get; set; }
public string StandortID { get; set; }
public List<Mess_Kanal> MessKanal { get; set; }
}
public class Mess_Kanal
{
public string ID { get; set; }
public string ModulID { get; set; }
public List<LogMess_Daten> LogMessDaten { get; set; }
}
public class LogMess_Daten
{
public string KanalID { get; set; }
public string Zeitstempel { get; set; }
}
public class RootObject
{
public int ID_Project { get; set; }
public string Name_Project { get; set; }
public int Receiver_ID { get; set; }
public string Receiver_Name { get; set; }
public int UserID { get; set; }
public User_Role UserRole { get; set; }
public Stand_Orte Standorte { get; set; }
}
有没有人有想法?
谢谢, Revathy
答案 0 :(得分:1)
$jsonData = file_get_contents("JSON_superproject.json");
$json = json_decode($jsonData);
$userRole = $json->UserRole;
$userGroups = $json->UserRole->UserGroup;
因此,例如在尝试阅读用户组时:
foreach($userGroups as $userGroup) {
echo $userGroup->Name_UserGroup . PHP_EOL;
}
由于您现在将所有内容都用作对象,要加载{}
之间的片段,您可以使用PHP中的->
来访问它们,[]
所包含的部分是仍然是数组和你习惯的。
示例:
echo $json->ID_Project;
echo $json->UserRole->ID_User;
用户组的额外SQL信息: 用sql语句将现有行替换为以下内容:
foreach($userGroups as $userGroup) {
$sqlStr .= "INSERT INTO user_group (`ID_UserGroup`,`Name_UserGroup`,`UserID`) VALUES (" . $userGroup->ID_UserGroup . ", '" . $userGroup->Name_UserGroup . "', " . $userGroup->UserID . ");";
}