2017-06-20 20 views
0

複数のデータベース設定のインデックスを作成しています。新しいデータベースが作成されるたびに、作業者が作業したいデータベースに接続できるようにするためのインデックスが必要です。インデックスをjsonファイルに保存した後、再度読み込むと、既存のデータを消去せずにどのように追加できますか?私が見てきたほとんどのチュートリアルでは、既存のデータを使ってできることは保存したり読み込んだりすることはできません。ありがとう!私はJSONUtilityを使用していますが、これは非常に単純な操作なので、他のライブラリの推奨事項には反対しません。Unity JSON既存のjsonデータにデータを追加します

答えて

2

JsonをListとして保存すると、これを簡単に行うことができます。既存のものを変更したいときは、それをロードしてAdd機能を使ってリストに追加してください。あなたが本当にする必要があるときにのみそれを保存してください。

UnityのJSONUtilityは、配列またはリストをシリアライズ/デシリアライズできないため、JsonHelperラッパーを使用して、JSONUtilityの上に構築する必要があります。あなたはそれを得ることができますhere。シリアライズとデシリアライズロードする

テストデータ:

[Serializable] 
public class PlayerData 
{ 
    public string name; 
    public int score; 
} 

ことのリストを作成し、そこに:

List<PlayerData> saveListData = new List<PlayerData>(); 
PlayerData saveData = new PlayerData(); 
saveData.name = "Programmer"; 
saveData.score = 80; 
saveListData.Add(saveData); 

保存(それを保存するために、配列に変換する必要があります):

string jsonToSave = JsonHelper.ToJson(saveListData.ToArray()); 
PlayerPrefs.SetString("Data", jsonToSave); 
PlayerPrefs.Save(); 

ロード(配列としてロードしてリストに戻す必要があります):

string jsonToLoad = PlayerPrefs.GetString("Data"); 
//Load as Array 
PlayerData[] _tempLoadListData = JsonHelper.FromJson<PlayerData>(jsonToLoad); 
//Convert to List 
List<PlayerData> loadListData = _tempLoadListData.OfType<PlayerData>().ToList(); 
for (int i = 0; i < loadListData.Count; i++) 
{ 
    Debug.Log("Got: " + loadListData[i].name); 
} 

読み込まれたデータにさらに情報を追加しますか?

loadListData.Add(new PlayerData()); 
loadListData.Add(new PlayerData()); 
loadListData.Add(new PlayerData()); 
loadListData.Add(new PlayerData()); 

もう一度保存することができます。

+0

誰かが自分のプロジェクトにこれを追加している場合は、OfTypeとToListが機能するようにLINQライブラリを追加してください。 –

+0

うん、 'usingType'を使うのに' using System.Linq; 'が必要です。ループを使って手動で行うこともできます。 – Programmer

+0

素晴らしい作品!ありがとう!! –

1

既存のJSONが存在する場合は、それを文字列にしておきます。保存する準備ができたら、古いJSONを新しく生成されたJSONに連結してディスクに保存するだけです。

ヒント:あなたがまだいない場合は、Json.NETを使用してください。

関連する問題