Java 创建复杂的Json结构

Java 创建复杂的Json结构,java,android,arrays,json,android-studio,Java,Android,Arrays,Json,Android Studio,我的挑战是,我发现将字符串格式化为json数据非常困难和棘手,例如: { "contacts":[ { "displayName" : "Michael" }, { "displayName" : "Efe", "phoneNumbers" : [ { "value" : "+23470390989" }

我的挑战是,我发现将字符串格式化为json数据非常困难和棘手,例如:

{
    "contacts":[
        {
         "displayName" : "Michael"
       },
       {
         "displayName" : "Efe",
         "phoneNumbers" : [
           {
             "value" : "+23470390989"
           }
         ]
       },
        {
         "displayName" : "Efe6",
         "phoneNumbers" : [
           {
             "value" : "+2347002478"
           }
         ]
       },
          {
         "displayName" : "No Reg",
         "phoneNumbers" : [
           {
             "value" : "+2347034567890"
           }
         ]
       },
       {
         "displayName" : "Efe2",
         "phoneNumbers" : [
           {
             "value" : "09058528818"
           }
         ]
       },

       {
         "displayName" : "Whales",
         "phoneNumbers" : [
           {
             "value" : "+23490574583"
           },
           {
             "value" : "+23481847979"
           }
         ]
       }
       ]
}
我试图格式化的字符串来自Getcontact类(它是get的手机联系人列表),希望很多人都熟悉从移动设备获取联系人的方法

尝试过

到目前为止,我尝试的是:

 ArrayList<PhoneNuberStructure> phoneNuberStructures = new ArrayList<>();
                        phoneNuberStructures.add(/*arrays of phonenumbers will come here*/);
那么这个

ArrayList<ContactsStructure> contacts = new ArrayList<ContactsStructure>();
                        contacts.add(contactsStructure);
ArrayList contacts=new ArrayList();
联系人。添加(联系人结构);
但我真的没弄对!这让人困惑

任何帮助都很好。 谢谢大家。

诸如此类

public class Contact {
    private String displayName = null;
    private List<PhoneNumber> phoneNumbers = null;
    public Contact() {}
    public Contact(String displayName, List<PhoneNumber> phoneNumbers) { this.displayName = displayName; this.phoneNumbers = phoneNumbers; }
    public String getDisplayName() { return displayName; }
    public void setDisplayName(String displayName) { this.displayName = displayName; }
    public List<PhoneNumber> getPhoneNumbers() { return phoneNumbers; }
    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) { this.phoneNUmbers = phoneNumbers; }
}
public class PhoneNumber {
    private String value = null;
    public PhoneNumber() {}
    public PhoneNumber(String value) { this.value = value; }
    public String getValue() { return value; }
    public void setValue(String value) { this.value = value }
}
public Class ContactsTest {
    public static void main(String[] args) {
        List<Contact> contacts = new ArrayList<>();
        Contact contact = new Contact("Michael", null);
        contacts.add(contact);
        List<PhoneNumber> phoneNumbers = new ArrayList<>();
        phoneNumbers.add(new PhoneNumber("+23470390989"));
        contacts.add(new Contact("Efe", phoneNumbers);
        Gson gson = new GsonBuilder().create();
        System.out.println(gson.toJson(contacts));
    }
}
公共类联系人{
私有字符串displayName=null;
私有列表电话号码=空;
公共联系人(){}
公共联系人(字符串displayName,列出电话号码){this.displayName=displayName;this.phoneNumbers=phoneNumbers;}
公共字符串getDisplayName(){return displayName;}
public void setDisplayName(字符串displayName){this.displayName=displayName;}
公共列表GetPhoneNumber(){返回PhoneNumber;}
public void setPhoneNumbers(列出phoneNumbers){this.phoneNumbers=phoneNumbers;}
}
公共类电话号码{
私有字符串值=null;
公用电话号码(){}
公用电话号码(字符串值){this.value=value;}
公共字符串getValue(){return value;}
public void setValue(字符串值){this.value=value}
}
公共类联系人{
公共静态void main(字符串[]args){
列表联系人=新建ArrayList();
联系人=新联系人(“Michael”,空);
联系人。添加(联系人);
List phoneNumbers=new ArrayList();
添加(新电话号码(“+23470390989”);
联系人。添加(新联系人(“Efe”,电话号码);
Gson Gson=new GsonBuilder().create();
System.out.println(gson.toJson(contacts));
}
}
类似这样的东西

public class Contact {
    private String displayName = null;
    private List<PhoneNumber> phoneNumbers = null;
    public Contact() {}
    public Contact(String displayName, List<PhoneNumber> phoneNumbers) { this.displayName = displayName; this.phoneNumbers = phoneNumbers; }
    public String getDisplayName() { return displayName; }
    public void setDisplayName(String displayName) { this.displayName = displayName; }
    public List<PhoneNumber> getPhoneNumbers() { return phoneNumbers; }
    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) { this.phoneNUmbers = phoneNumbers; }
}
public class PhoneNumber {
    private String value = null;
    public PhoneNumber() {}
    public PhoneNumber(String value) { this.value = value; }
    public String getValue() { return value; }
    public void setValue(String value) { this.value = value }
}
public Class ContactsTest {
    public static void main(String[] args) {
        List<Contact> contacts = new ArrayList<>();
        Contact contact = new Contact("Michael", null);
        contacts.add(contact);
        List<PhoneNumber> phoneNumbers = new ArrayList<>();
        phoneNumbers.add(new PhoneNumber("+23470390989"));
        contacts.add(new Contact("Efe", phoneNumbers);
        Gson gson = new GsonBuilder().create();
        System.out.println(gson.toJson(contacts));
    }
}
公共类联系人{
私有字符串displayName=null;
私有列表电话号码=空;
公共联系人(){}
公共联系人(字符串displayName,列出电话号码){this.displayName=displayName;this.phoneNumbers=phoneNumbers;}
公共字符串getDisplayName(){return displayName;}
public void setDisplayName(字符串displayName){this.displayName=displayName;}
公共列表GetPhoneNumber(){返回PhoneNumber;}
public void setPhoneNumbers(列出phoneNumbers){this.phoneNumbers=phoneNumbers;}
}
公共类电话号码{
私有字符串值=null;
公用电话号码(){}
公用电话号码(字符串值){this.value=value;}
公共字符串getValue(){return value;}
public void setValue(字符串值){this.value=value}
}
公共类联系人{
公共静态void main(字符串[]args){
列表联系人=新建ArrayList();
联系人=新联系人(“Michael”,空);
联系人。添加(联系人);
List phoneNumbers=new ArrayList();
添加(新电话号码(“+23470390989”);
联系人。添加(新联系人(“Efe”,电话号码);
Gson Gson=new GsonBuilder().create();
System.out.println(gson.toJson(contacts));
}
}

如果我正确理解了您要问的问题,您的类应该如下所示:

class Contact {
    String displayName;
    ArrayList<PhoneNumber> phoneNumbers;
    // constructors and getter/setters
}

class PhoneNumber {
    String value;
    // constructor and getter/setters
}
class联系人{
字符串显示名;
数组列表电话号码;
//构造函数和getter/setter
}
类电话号码{
字符串值;
//构造函数和getter/setter
}
现在,您需要创建一个联系人数组

ArrayList<Contact> contacts = new ArrayList<>();

contacts.add(new Contact("Michael"),null); 
contacts.add(new Contact("Michael"),Arrays.asList(new PhoneNumber("+23470390989"));
ArrayList contacts=new ArrayList();
联系人。添加(新联系人(“Michael”),空;
contacts.add(新联系人(“Michael”)、Arrays.asList(新电话号码(“+23470390989”));

依此类推……

如果我正确理解了您的问题,您的课程应该如下所示:

class Contact {
    String displayName;
    ArrayList<PhoneNumber> phoneNumbers;
    // constructors and getter/setters
}

class PhoneNumber {
    String value;
    // constructor and getter/setters
}
class联系人{
字符串显示名;
数组列表电话号码;
//构造函数和getter/setter
}
类电话号码{
字符串值;
//构造函数和getter/setter
}
现在,您需要创建一个联系人数组

ArrayList<Contact> contacts = new ArrayList<>();

contacts.add(new Contact("Michael"),null); 
contacts.add(new Contact("Michael"),Arrays.asList(new PhoneNumber("+23470390989"));
ArrayList contacts=new ArrayList();
联系人。添加(新联系人(“Michael”),空;
contacts.add(新联系人(“Michael”)、Arrays.asList(新电话号码(“+23470390989”));

等等…

为了清楚起见,我必须坚持这一点。对所有的回应竖起大拇指

/*CODE SECTION 1*/    
    JSONObject con =  new JSONObject();
                JSONArray contacts = new JSONArray();

/*CODE SECTION 2*/
    JSONObject contactInfo = new JSONObject();
                                        contactInfo.put("displayName" , name);
                                        JSONArray phoneNos = new JSONArray();
                                        JSONObject value = new JSONObject();
                                        value.put("value" , phoneNo);
                                        phoneNos.put(value);
                                        contactInfo.put("phoneNumbers" , phoneNos);
                                        contacts.put(contactInfo);

/*CODE SECTION 3*/
    con.put("contacts", contacts);
因此,实际发生的是,由于我从电话簿中获取联系人的方式,使得使用该代码变得简单。下面是我从电话中获取联系人并以请求的JSON格式返回的代码的最终外观。因此,主要设置发生在代码部分2

    ContentResolver cr = getContentResolver();
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                    null, null, null, null);

/* INSERT CODE SECTION 1*/  

    if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (Integer.parseInt(cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    Cursor pCur = cr.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                            new String[]{id}, null);
                    while (pCur.moveToNext()) {
String phoneNo=pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

/* INSERT CODE SECTION 2*/

}
                pCur.close();
            }
        }
    }

/*INSERT CODE SECTION 3*/

为了清楚起见,我必须坚持这一点。对所有的回应都竖起大拇指

/*CODE SECTION 1*/    
    JSONObject con =  new JSONObject();
                JSONArray contacts = new JSONArray();

/*CODE SECTION 2*/
    JSONObject contactInfo = new JSONObject();
                                        contactInfo.put("displayName" , name);
                                        JSONArray phoneNos = new JSONArray();
                                        JSONObject value = new JSONObject();
                                        value.put("value" , phoneNo);
                                        phoneNos.put(value);
                                        contactInfo.put("phoneNumbers" , phoneNos);
                                        contacts.put(contactInfo);

/*CODE SECTION 3*/
    con.put("contacts", contacts);
因此,实际发生的是,由于我从电话簿中获取联系人的方式,使得使用该代码变得简单。下面是我从电话中获取联系人并以请求的JSON格式返回的代码的最终外观。因此,主要设置发生在代码部分2

    ContentResolver cr = getContentResolver();
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                    null, null, null, null);

/* INSERT CODE SECTION 1*/  

    if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (Integer.parseInt(cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    Cursor pCur = cr.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                            new String[]{id}, null);
                    while (pCur.moveToNext()) {
String phoneNo=pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

/* INSERT CODE SECTION 2*/

}
                pCur.close();
            }
        }
    }

/*INSERT CODE SECTION 3*/

你能再解释一下吗?我可以将这些字符串格式化成数组,但我不确定如何将这些数组变成一个对象中的一组数组……就像我放在那里的方式(我想要的结果),看看我到目前为止所做的,我可以取联系人姓名,这很简单,至于联系人号码(然后我必须将它像对象组一样存储在数组中,这对我来说有点挑战。)您可以使用GSon,然后调用
GSon-GSon=new-GsonBuilder().create();GSon.toJson(topLevelObject)
。您必须为每个中断创建一个新数组;有什么让人困惑的?您能再解释一下吗?我可以将这些字符串格式化为数组,但我不确定如何才能使这些数组成为对象中的一组数组……就像我