json for php+mysql错误

syqv5f0l  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(282)

我的客户给我发送了这个json,这样我就可以在mysql中循环并保存数据。我只是不能得到它,因为它不同于我的工作;
有人能给我一些提示吗?从一种格式到另一种格式有什么不同。
出现的错误是:警告:第28行中为foreach()提供的参数无效
foreach($json\u data['service\u devices']作为$key=>$value){
与我共事过的前格式化程序:

{
     "ordem_de_servico": [
         {
             "oser_numero_os": 23940493,
             "oser_address_name": NAME;

客户json

ordem_de_servico:
        {  
           "oser_numero_os":23940493,
           "oser_dt_abertura":"28/03/2018",
           "servico":{  
              "serv_cod_servico":60,
              "serv_descr_servico":"CORTE POR DEBITO"
           },
           "cliente":{  
              "clie_ident_cliente":638617,
              "nome":"MARIA APARECIDA FERREIRA DO NASCIMENTO"
           },
           "unidade_consumidora":{  
              "unid_ident_uc":2436434,
              "logr_nome_logr_expandido":"R JOSE GUIMARAES"
           },
           "faturas":[  
              {  
                 "total_fatura":"88.44",
                 "ftcd_mes_ano_fatmto":"2017-04-01"
              },
              {  
                 "total_fatura":"45.16",
                 "ftcd_mes_ano_fatmto":"2017-03-01"
              }
           ]
    }

我最后一次尝试

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "webservice";
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    // Read JSON file
    $json = file_get_contents('oss.json');

    //Decode JSON
    $json_data = json_decode($json,true);

    foreach($json_data['ordens_de_servico'] as $key => $value){
        $os = $value["oser_numero_os"];
        $data_abertura = $value["oser_dt_abertura"];

        foreach($json_data['ordens_de_servico'][$key]['faturas'] as $index => $row){

            $valorParcelas = $row["total_fatura"];
            $sql = "SELECT numero_os FROM os WHERE numero_os = '$os'";
            $result = $conn->query($sql);
            if ($result->num_rows > 0) {
                    echo "PULAR FATURA"."<p>";
            }else {     
            $sql = "INSERT INTO faturas (valorParcelas, numero_os) VALUES ('$valorParcelas', '$os')";
                if ($conn->query($sql) === TRUE) {
                    echo "<strong>".$valorParcelas." - FATURA OK"."</strong>"."<p>";
                } else {
                    echo "Error Fatura";
                }
            }
        }
        $sql = "SELECT numero_os FROM os WHERE numero_os = '$os'";
            $result = $conn->query($sql);
            if ($result->num_rows > 0) {
                    echo "PULAR"."<p>";
            }
            else{
                $sql = "INSERT INTO os (numero_os, data_abertura) VALUES ('$os', '$data_abertura')";
                if ($conn->query($sql) === TRUE) {
                    echo "<strong>".$os." - GRAVADO"."</strong>"."<p>";
                } else {
                    echo "Error";
                }
            }

    }

    $conn->close();
    ?>
qlfbtfca

qlfbtfca1#

您的json不正确。主要的问题是json数据本身,它对于 json_encode() 生成php数组。
第一种可能solution:remove ordem_de_servico: 从我们的客户那里,那会有用的。
为了 json_decode(); 方法json数据必须有效,有效数据为

{  
    "oser_numero_os":23940493,
    "oser_dt_abertura":"28/03/2018",
    "servico":{  
        "serv_cod_servico":60,
        "serv_descr_servico":"CORTE POR DEBITO"
    },
    "cliente":{  
        "clie_ident_cliente":638617,
        "nome":"MARIA APARECIDA FERREIRA DO NASCIMENTO"
    },
    "unidade_consumidora":{  
        "unid_ident_uc":2436434,
        "logr_nome_logr_expandido":"R JOSE GUIMARAES"
    },
    "faturas":[  
        {  
            "total_fatura":"88.44",
            "ftcd_mes_ano_fatmto":"2017-04-01"
        },
        {  
            "total_fatura":"45.16",
            "ftcd_mes_ano_fatmto":"2017-03-01"
        }
    ]
}

第二种可能solution:what you 我能做的就是移除 ordem_de_servico: 从客户json数据中提取字符串,或者让json提供程序提供有效的json数据,如下所示 ordem_de_servico: .

{
    "ordem_de_servico":{  
        "oser_numero_os":23940493,
        "oser_dt_abertura":"28/03/2018",
        "servico":{  
            "serv_cod_servico":60,
            "serv_descr_servico":"CORTE POR DEBITO"
        },
        "cliente":{  
            "clie_ident_cliente":638617,
            "nome":"MARIA APARECIDA FERREIRA DO NASCIMENTO"
        },
        "unidade_consumidora":{  
            "unid_ident_uc":2436434,
            "logr_nome_logr_expandido":"R JOSE GUIMARAES"
        },
        "faturas":[  
            {  
                "total_fatura":"88.44",
                "ftcd_mes_ano_fatmto":"2017-04-01"
            },
            {  
                "total_fatura":"45.16",
                "ftcd_mes_ano_fatmto":"2017-03-01"
            }
        ]
    }
}

请查看有效的json格式 json_decode() json数据没有不同的类型,只有一种类型,即json。

5kgi1eie

5kgi1eie2#

更改行:

foreach($json_data['ordens_de_servico'] as $key => $value){

收件人:

foreach($json_data as $key => $value){

因为新数据没有外部元素 ordens_de_servico 或者您可以编辑json文件并添加该元素(不要忘记在末尾添加右大括号)。
编辑文件的前两行:

ordem_de_servico:
        {

收件人:
{“ordem_de_servico”:[
并更改文件的结尾:

}

收件人:

]
}

相关问题