【问题标题】:Creating Complex Json Structure创建复杂的 Json 结构
【发布时间】:2018-12-12 02:01:06
【问题描述】:

我的挑战是我发现将字符串格式化为这样的 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 类(它从手机获取联系人列表),希望很多人都熟悉从移动设备获取联系人的方法。

尝试过

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

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

与

ContactsStructure contactsStructure= new ContactsStructure();
                        contactsStructure.setDisplayName(name);
                        contactsStructure.setPhoneNumbers(new PhoneNuberStructure);

这样

ArrayList<ContactsStructure> contacts = new ArrayList<ContactsStructure>();
                        contacts.add(contactsStructure);

但我并没有真正做对!而且很混乱……

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

【问题讨论】:

  • 你能解释一下有什么令人困惑的地方
  • 我可以将这些字符串格式化为数组,但我不知道如何才能使这些数组成为对象中的一组数组......就像我把它放在那里的方式(The我想要的结果),看看我到目前为止所做的事情,我可以取联系人姓名,这很容易,至于联系人号码(然后我必须将它像对象组一样存储在数组中,这有点具有挑战性对我来说。)
  • 您可以使用 GSon 然后致电Gson gson = new GsonBuilder().create(); gson.toJson(topLevelObject);。您必须为每个中断创建一个新数组;

标签: java android arrays json android-studio


【解决方案1】:

为了清楚起见,我只需要坚持这一点。 赞一个对所有回复

/*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);

所以实际发生的情况是,由于我从电话簿中获取联系人的方式,使得使用该代码变得容易。下面是我从电话中获取联系人并以 REQUESTED JSON FORMAT 格式返回的代码的最终外观。所以主要设置发生在 CODE SECTION 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*/

【讨论】:

    【解决方案2】:

    如果我正确理解了您要问的内容,那么您的课程应该如下所示:

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

    现在,您需要创建一个联系人数组。

    ArrayList<Contact> contacts = new ArrayList<>();
    
    contacts.add(new Contact("Michael"),null); 
    contacts.add(new Contact("Michael"),Arrays.asList(new PhoneNumber("+23470390989"));
    

    等等……

    【讨论】:

      【解决方案3】:

      类似的东西

      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));
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多