PHP - reemplazar contenido de un .json con php

 
Vista:
sin imagen de perfil

reemplazar contenido de un .json con php

Publicado por Ariel (4 intervenciones) el 07/05/2023 10:51:27
Hola, estoy intentando crear una api basada en php para el almacenamiento de variables en formato String, aquí les dejo el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
    $Mykey = "9dP5f60A";
 
    $StrVar = $_GET["StrVar"];
    $Key    = $_GET["Key"];
    $StrReturn = "";
 
    if($Key == $Mykey){
        $StrVarCut = explode(":", $StrVar);
 
        $JsonFileName = "./bd.json";
        $JsonFile = fopen($JsonFileName, "r+");
        $JsonIn = fread($JsonFile, filesize($JsonFileName));
        $StrVarArray = json_decode($JsonIn,true);
 
        foreach($StrVarCut as $StrVarCutItm){
            $StrVarCutItm_ID  = substr($StrVarCutItm, 0, 6);
            $StrVarCutItm_Var = substr($StrVarCutItm, 6, 2);
            $StrVarCutItm_Opt = substr($StrVarCutItm, 8, 1);
            $StrVarCutItm_Val = substr($StrVarCutItm, 9);
 
            if($StrVarCutItm_ID != "" && $StrVarCutItm_Opt != "" && $StrVarCutItm_Var != ""){
                if($StrVarCutItm_Opt == "?"){
                    $StrReturn = $StrReturn.$StrVarCutItm_ID.$StrVarCutItm_Var."!".$StrVarArray[$StrVarCutItm_ID][$StrVarCutItm_Var].":";
                }
                elseif($StrVarCutItm_Opt == "!"){
                    $StrVarArray[$StrVarCutItm_ID][$StrVarCutItm_Var] = $StrVarCutItm_Val;
                    //$StrVarCutItm_ID.$StrVarCutItm_Var."!".$StrVarArray[$StrVarCutItm_ID][$StrVarCutItm_Var].":";
                }
            }
        }
        echo $StrReturn;
        fwrite($JsonFile, json_encode($StrVarArray));
        fclose($JsonFile);
    }
?>

mi problema es la lectura/escritura, la idea es que al hacer una consulta a la api, lea el archivo .json, lo decodifique en formato array (de dos niveles), lea o escriba en esta decodificación las variables y posteriormente, lo vuelva a codificar y gravar en el archivo, reescribiendo este mismo, pero, en el .json, se me mantiene la array anterior y se le añade la nueva, impidiendo la correcta lectura del archivo.

alguna idea sobre que puedo hacer?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

reemplazar contenido de un .json con php

Publicado por Alejandro (839 intervenciones) el 08/05/2023 23:25:03
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Antes del fwrite pon esta linea:
1
$JsonFile = fopen($JsonFileName, "w+");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

reemplazar contenido de un .json con php

Publicado por Ariel (4 intervenciones) el 14/05/2023 13:39:41
Hola, ya funciona, pero una duda, como puedo hacer que el formato del archivo sea el propio de un json, es decir, que pase de
1
{"000001":{"01":"Pepe","02":"0"},"000002":{"01":"Juan","02":"Agustin"}}
a
1
2
3
4
5
6
7
8
9
10
{
  "000001":{
    "01":"Pepe",
    "02":"0"
  },
  "000002":{
    "01":"Juan",
    "02":"Agustin"
  }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

reemplazar contenido de un .json con php

Publicado por Alejandro (839 intervenciones) el 16/05/2023 17:18:57
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
1
2
3
$json_ugly = '{"000001":{"01":"Pepe","02":"0"},"000002":{"01":"Juan","02":"Agustin"}}';
$json_pretty = json_encode(json_decode($json_ugly), JSON_PRETTY_PRINT);
echo "<pre>$json_pretty</pre>";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

reemplazar contenido de un .json con php

Publicado por Ariel (4 intervenciones) el 17/05/2023 11:38:45
Hola, gracias, aun me da algunos problemas, uno esta relacionado con el orden de los valores en la array, para que mi código funcione como quiero, es decir, de manera secuencial, necesito que los valores de la petición y del propio archivo estén con su "VAR" por orden (para no depender del emisor de la petición), pero, no consigo hacerlo, y en la pagina de referencia de PHP hay 13 funciones diferentes para ordenar arrays, y no se como usarlas, la idea es que tanto el id como la variable puedan tener variables alfanuméricas, es decir: 0-9,a-z,A-Z

Que función debería usar?

el otro es con la respuesta, si coloco el echo fuera de el primer foreach, no responde nada, por el contrario si lo coloco dentro, por cada grupo de variables/keys, me imprime el contenido total de la variable, es decir:

respuesta1:respuesta1:respuesta2:respuesta1:respuesta2:respuesta3:...

como lo puedo solucionar?

aquí les dejo los códigos:

./index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
    $StrVar = $_GET["STRVAR"];
    $StrKey    = $_GET["STRKEY"];
    $StrReturn = "";
 
    $StrVarCut = explode(":", $StrVar);
    $StrKeyCut = explode(":", $StrKey);
 
    ksort($StrVarCut);
    ksort($StrKeyCut);
 
    foreach($StrKeyCut as $StrKeyCutItm){ //KeyFormat: xxxxxxyyyyyyyy:
        $triger_write = 0;
 
        $StrKeyCutItm_ID  = substr($StrKeyCutItm, 0, 6);
        $StrKeyCutItm_KEY = substr($StrKeyCutItm, 6, 8);
 
        $JsonFileName = "./BD/".$StrKeyCutItm_ID.".json";
        $JsonFile = fopen($JsonFileName, "r+");
        $JsonIn = fread($JsonFile, filesize($JsonFileName));
        $StrVarArray = json_decode($JsonIn,true);
 
        if($StrVarArray["KEY"] == $StrKeyCutItm_KEY){
            foreach($StrVarCut as $StrVarCutItm){  //VarFormat xxxxxxyyzw...:
                $StrVarCutItm_ID  = substr($StrVarCutItm, 0, 6);
                $StrVarCutItm_Var = substr($StrVarCutItm, 6, 2);
                $StrVarCutItm_Opt = substr($StrVarCutItm, 8, 1);
                $StrVarCutItm_Val = substr($StrVarCutItm, 9);
 
                if($StrVarCutItm_ID == $StrKeyCutItm_ID && $StrVarCutItm_Opt != "" && $StrVarCutItm_Var != ""){
                    if($StrVarCutItm_Opt == "?"){
                        $StrReturn = $StrReturn.$StrVarCutItm_ID.$StrVarCutItm_Var."!".$StrVarArray["VAR"][$StrVarCutItm_Var].":";
                    }
                    elseif($StrVarCutItm_Opt == "!"){
                        $StrVarArray["VAR"][$StrVarCutItm_Var] = $StrVarCutItm_Val;
                        $triger_write = 1;
                    }
                }
            }
        }
        if($triger_write == 1){
            $JsonFile = fopen($JsonFileName, "w+");
            fwrite($JsonFile, json_encode($StrVarArray, JSON_PRETTY_PRINT));
        }
        fclose($JsonFile);
        echo $StrReturn;
    }
?>

./BD/000001.json
1
2
3
4
5
6
7
8
9
{
    "KEY": "01010101",
    "VAR": {
        "01": "*",
        "03": "***",
        "02": "**",
        "04": "****"
    }
}


./BD/000002.json
1
2
3
4
5
6
7
8
{
    "KEY":"02020202",
    "VAR":{
        "01":"*",
        "03":"***",
        "02":"**"
    }
}

gracias por la ayuda :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

reemplazar contenido de un .json con php

Publicado por Ariel (4 intervenciones) el 29/05/2023 13:49:10
Hola, todavía no lo he podido arreglar, ¿Alguna idea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar