PHP json_decode()具有来自C#的多级键值对

时间:2014-11-14 14:24:29

标签: c# php json

我正在使用从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

1 个答案:

答案 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 . ");";
}