Bonjour à tous !
J'expérimente VisionLib qui est très sympa et j'aimerais modifier un paramètre qui se trouve dans un fichier .vl (json schema ):
https://visionlib.com/2020/04/02/vision ... se-20-3-1/
(partie Json Schema)
Je n'ai pas très bien compris comment fonctionné le script avec du json
Il me faut juste passer une valeur de false à true et de true à false selon les cas.
Merci beaucoup !
[Résolu] Modifié valeur Json
-
- Messages : 60
- Inscription : 04 Déc 2017 19:12
[Résolu] Modifié valeur Json
Dernière édition par Leuprochon le 10 Oct 2020 22:24, édité 1 fois.
-
- Messages : 60
- Inscription : 04 Déc 2017 19:12
Re: Modifié valeur Json
Bon, alors j'ai un peu avancé mais ça ne fonctionne toujours pas
J'arrive à lire mon fichier, à le modifier, à le sauvegarder. Ou est le problème me direz vous ? Ben il ne prend pas en compte ma modification, allez savoir pourquoi ...
Voici mon fichier .vl (équivalent au .txt)
Et voici mon code
[*][*]
Dans la console d'unity le changement s'effectue bien, mais quand je vérifie sur mon nouveau fichier il n'y a aucune modification. Je ne comprends pas pourquoi.
Si quelqu'un a une idée ça serait super !
Merci bien
J'arrive à lire mon fichier, à le modifier, à le sauvegarder. Ou est le problème me direz vous ? Ben il ne prend pas en compte ma modification, allez savoir pourquoi ...
Voici mon fichier .vl (équivalent au .txt)
Code : Tout sélectionner
{
"type": "VisionLibTrackerConfig",
"version": 1,
"meta": {
"author": "",
"description": "",
"name": "",
"vlTrackingConfig": {},
"uuid": "2bcc7e7f-6220-4a6a-af5b-166b7afd17c6",
"timeCreated": 1601545823,
"timeChanged": 1601545825
},
"tracker": {
"type": "modelTracker",
"version": 1,
"parameters": {
"minInlierRatioInit": 0.6,
"minInlierRatioTracking": 0.42,
"laplaceThreshold": 1,
"normalThreshold": 2.5,
"lineGradientThreshold": 40,
"lineSearchLengthInitRelative": 0.04125,
"lineSearchLengthTrackingRelative": 0.03125,
"keyFrameDistance": 50,
"metric": "cm",
"showLineModel": true,
"models": [
{
"name": "Gaio_ModelTarget_V01",
"uri": "project_dir:Gaio_ModelTarget_V01.fbx"
}
],
"initPose": {
"t": [
-7.307137489318848,
37.529937744140625,
299.53997802734375
],
"q": [
0.995162308216095,
0.09824426472187042,
0,
0
]
}
}
}
}
[*][*]
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using SimpleJSON;
public class ChangeJsonValue : MonoBehaviour
{
string path;
string jsonString;
// Start is called before the first frame update
void Start()
{
path = Application.dataPath + "/StreamingAssets/VisionLib/Gaio/test.vl";
jsonString = File.ReadAllText(path);
JSONNode data = JSON.Parse(jsonString);
foreach (JSONNode record in data["tracker"])
{
record["showLineModel"] = false;
Debug.Log(record["showLineModel"]);
}
}
private void Update()
{
File.WriteAllText(Application.dataPath + "/StreamingAssets/VisionLib/Gaio/sdsd.vl", jsonString);
}
}
Si quelqu'un a une idée ça serait super !
Merci bien
- boubouk50
- ModoGenereux
- Messages : 6247
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Modifié valeur Json
A aucun moment tu ne modifies ta JsonString, tu ne modifies que les données récupérées.
Il te faut donc recréer la JsonString avec les données modifiées.
Heureusement, c'est très simple avec la fonction ToJson ().
Juste avant de sauvegarder, hop tu mets à jour ta chaîne de caractères et ça devrait être bon.
Je vois que n'utilises pas non plus la classe JsonUtility pour importer, mais un namespace supplémentaire. Sache que c'est intégré et ça fait la même chose.
Il te faut donc recréer la JsonString avec les données modifiées.
Heureusement, c'est très simple avec la fonction ToJson ().
Juste avant de sauvegarder, hop tu mets à jour ta chaîne de caractères et ça devrait être bon.
Code : Tout sélectionner
jsonString = JsonUtility.ToJson (data, true);
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
-
- Messages : 60
- Inscription : 04 Déc 2017 19:12
Re: Modifié valeur Json
Merci pour ton aide !
Malheureusement ça ne veut pas fonctionner.
Voici mon code now:
Dans la console unity j'ai
Pour le Debug.Log(JsonUtility.ToJson(data, true)); = {}
Pour le Debug.Log(data); = tout mon fichier texte donc j'ai bien toutes mes données dans data
Je ne comprends pas pourquoi quand il recréé mes données il n'y arrive pas et il réécrit {} sans rien d'autre ... Comme si il n'arrivait pas à récupérer les données de data. On obtient donc un fichier vierge
Malheureusement ça ne veut pas fonctionner.
Voici mon code now:
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using SimpleJSON;
public class ChangeJsonValue : MonoBehaviour
{
string path;
string jsonString;
// Start is called before the first frame update
void Start()
{
path = Application.dataPath + "/StreamingAssets/VisionLib/Gaio/test.vl";
jsonString = File.ReadAllText(path);
JSONNode data = JSON.Parse(jsonString);
foreach (JSONNode record in data["tracker"])
{
record["showLineModel"] = false;
}
Debug.Log(JsonUtility.ToJson(data, true));
Debug.Log(data);
Save();
}
private void Save()
{
File.WriteAllText(Application.dataPath + "/StreamingAssets/VisionLib/Gaio/sdsd.vl", jsonString);
}
}
Pour le Debug.Log(JsonUtility.ToJson(data, true)); = {}
Pour le Debug.Log(data); = tout mon fichier texte donc j'ai bien toutes mes données dans data
Je ne comprends pas pourquoi quand il recréé mes données il n'y arrive pas et il réécrit {} sans rien d'autre ... Comme si il n'arrivait pas à récupérer les données de data. On obtient donc un fichier vierge
- boubouk50
- ModoGenereux
- Messages : 6247
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Modifié valeur Json
Je ne sais pas ce que JSONNODE contient et comment il est géré.
Perso, j'utilise la classe JsonUtility pour récupérer et envoyer les données.
Mon Json:
j'ai les classes qui définissent les éléments de mon JSON
Ensuite, c'est très simple pour lire et écrire un JSon:
Entre temps, bien évidemment tu travailles sur mainData pour modifier les données.
Perso, j'utilise la classe JsonUtility pour récupérer et envoyer les données.
Mon Json:
Code : Tout sélectionner
{
"n_name": "myMainName",
"dimension": { "x": 2.5346, "y": 1.192 },
"datas": [
{
"s_name": "mySecondaryName1",
"position": { "x": 0.168, "y": 0.592 }
},
{
"s_name": "mySecondaryName2",
"position": { "x": 0.832, "y": 0.592 }
},
etc...
]
}
Code : Tout sélectionner
[Serializable]
public class MainData
{
public string m_name;
public Vector2 dimension;
public List<SecondaryData> datas;
}
[Serializable]
public class SecondaryData
{
public string s_name;
public Vector2 position;
}
Code : Tout sélectionner
//La lecture
MainData mainData = JsonUtility.FromJson<MainData>(File.ReadAllText(jsonFilePath));
//L'écriture
File.WriteAllText (jsonFilePath, JsonUtility.ToJson (mainData, true));
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
-
- Messages : 60
- Inscription : 04 Déc 2017 19:12
Re: Modifié valeur Json
Merci pour ton aide !
Au même moment le créateur du SimpleJSON m'a aidé a résoudre mon problème, voici le post pour ceux que ça intéresse :
https://forum.unity.com/threads/modify- ... st-6402034
Au même moment le créateur du SimpleJSON m'a aidé a résoudre mon problème, voici le post pour ceux que ça intéresse :
https://forum.unity.com/threads/modify- ... st-6402034