私はJSONファイルを持っています。それを読み、編集し、再度書き出す必要があります。
読み取りは正常に機能します。データ内の JSON 配列の書き込み部分に苦労しています。
JSON.simpleライブラリを使用して、Java で JSON を操作します。
ファイルは次のようになります。
{
"maxUsers":100,
"maxTextLength":2000,
"maxFileSize":2000,
"services":
[
{
"serviceName":"Яндекc",
"className":"YandexConnector.class",
"isEnabled":true
},
{
"serviceName":"Google",
"className":"GoogleConnector.class",
"isEnabled":false
}
]
}
obj
JSON データ (変数) をファイルに書き込もうとすると、services
配列が壊れます。私の書き込みコード:
JSONObject obj = new JSONObject();
obj.put("maxUsers", this.getMaxUsers());
obj.put("maxTextLength", this.getMaxTextLength());
obj.put("maxFileSize", this.getMaxFileSize());
JSONArray servicesJSON = new JSONArray();
ArrayList<Service> servicesArray = this.getServices();
for(int i=0; i< servicesArray.size(); i++)
{
servicesJSON.add(servicesArray.get(i));
}
obj.put("services", servicesJSON);
FileWriter file = new FileWriter(filename);
obj.writeJSONString(file);
file.flush();
file.close();
これは以下を出力します:
{
"services":
[
translator.settings.Service@121c5df,
translator.settings.Service@45f4ae
],
"maxTextLength":2000,
"maxUsers":100,
"maxFileSize":2000
}
のような JSONArray にある場合、JSON データをファイルに正しく書き込むにはどうすればよいservices
ですか?
ファイルから JSON データを読み取るコード (正常に動作します):
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader(filename));
JSONObject jsonObject = (JSONObject) obj;
setMaxUsers((Long) jsonObject.get("maxUsers"));
setMaxTextLength((Long) jsonObject.get("maxTextLength"));
setMaxFileSize((Long) jsonObject.get("maxFileSize"));
// get all list of services
JSONArray serv = (JSONArray) jsonObject.get("services");
for (int i = 0; i < serv.size(); i++) {
JSONObject service = (JSONObject) serv.get(i);
Service servec = new Service();
servec.setServiceName((String) service.get("serviceName"));
servec.setClassName((String) service.get("className"));
servec.setIsEnabled((Boolean) service.get("isEnabled"));
services.add(i, servec);
}
編集部分はまだ書かれていないので、読み込みの直後に書き込み部分を呼び出します。