org.jsonのtoString()メソッドを使用して、典型的な Java オブジェクトを文字列化しようとしています。ただし、Bean のコレクションまたは配列型のメンバーは、バイト配列の形式で文字列化されています。問題を説明するためにサンプルコードを用意しました。
これが私が期待していることです:
{
"nonWorkingDays":[
"Saturday",
"Sunday"
],
"workingDays":[
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"days":[
1,
2,
3,
4,
5,
6,
7
]
}
そして、ここに私が代わりに得ているものがあります:
{
"nonWorkingDays": [
{
"bytes": [
{},
{}, ...
],
"empty": false
},
{
"bytes": [
{},
{}, ...
],
"empty": false
}
],
"workingDays": [
{
"bytes": [
{},
{}, ...
],
"empty": false
},
{
"bytes": [
{},
{}, ...
],
"empty": false
}, ...
],
"days": [
{},
{}, ...
]
}
最後に、ここに私のコードがあります:
/* Week.java */
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Week {
private List<String> workingDays = new ArrayList<String>();
private String[] nonWorkingDays;
int days[];
public Week() {
String[] workingDaysArray = new String[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
workingDays.addAll(Arrays.asList(workingDaysArray));
nonWorkingDays = new String[] { "Saturday", "Sunday" };
days = new int[] { 1, 2, 3, 4, 5, 6, 7 };
}
public List<String> getWorkingDays() {
return workingDays;
}
public String[] getNonWorkingDays() {
return nonWorkingDays;
}
public int[] getDays() {
return days;
}
@Override
public String toString() {
return "Week [workingDays=" + workingDays + ", nonWorkingDays=" + Arrays.toString(nonWorkingDays) + ", days="
+ Arrays.toString(days) + "]";
}
}
/* WeekTest.java */
import org.json.JSONException;
import org.json.JSONObject;
public class WeekTest {
public static void main(String[] args) throws JSONException {
Week myWeek = new Week();
JSONObject myWeekJSON = new JSONObject(myWeek);
String myWeekJSONString = myWeekJSON.toString(2);
System.out.println(myWeekJSONString); // Formatted JSON string
System.out.println(myWeek); // Output from Week's toString()
}
}
ところで、Week の toString() メソッドの出力は次のとおりです。
Week [workingDays=[Monday, Tuesday, Wednesday, Thursday, Friday], nonWorkingDays=[Saturday, Sunday], days=[1, 2, 3, 4, 5, 6, 7]]
編集:
問題はこの maven artifactにあるようです。この github リポジトリからソースに更新した後、すべてが修正されました。以下のコメントを参照してください。