Android端如何构造指定结构的JSONObject用于Web服务传参
Android 构造指定JSONObject实现方案
你需要实现的目标完整JSON结构如下:
{ "customerAccount": { "payloadType": "KEYED", "accountType": "CHECKING", "cardDetails": { "dataFormat": "PLAIN_TEXT", "cardNumber": "5454545454545454", "expiryDate": "1221", "cvv": "123", "issueNumber": "01" } } }
直接使用Android系统自带的org.json.JSONObject即可实现,无需引入第三方库,也不需要用到JSONArray,实现逻辑按嵌套层级从内到外构造即可。
Java 实现代码
import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public JSONObject buildCustomerAccountJson() { try { // 1. 构造最内层的cardDetails对象 JSONObject cardDetails = new JSONObject(); cardDetails.put("dataFormat", "PLAIN_TEXT"); cardDetails.put("cardNumber", "5454545454545454"); cardDetails.put("expiryDate", "1221"); cardDetails.put("cvv", "123"); cardDetails.put("issueNumber", "01"); // 2. 构造customerAccount对象,塞入cardDetails JSONObject customerAccount = new JSONObject(); customerAccount.put("payloadType", "KEYED"); customerAccount.put("accountType", "CHECKING"); customerAccount.put("cardDetails", cardDetails); // 3. 构造根对象,塞入customerAccount JSONObject rootJson = new JSONObject(); rootJson.put("customerAccount", customerAccount); // 调试时可以打印格式化后的JSON验证结构 Log.d("ConstructedJSON", rootJson.toString(4)); return rootJson; } catch (JSONException e) { e.printStackTrace(); return null; } }
Kotlin 实现代码
import org.json.JSONObject import android.util.Log fun buildCustomerAccountJson(): JSONObject? { return try { // 构造内层cardDetails val cardDetails = JSONObject().apply { put("dataFormat", "PLAIN_TEXT") put("cardNumber", "5454545454545454") put("expiryDate", "1221") put("cvv", "123") put("issueNumber", "01") } // 构造customerAccount val customerAccount = JSONObject().apply { put("payloadType", "KEYED") put("accountType", "CHECKING") put("cardDetails", cardDetails) } // 构造根对象 val rootJson = JSONObject().apply { put("customerAccount", customerAccount) } // 调试输出 Log.d("ConstructedJSON", rootJson.toString(4)) rootJson } catch (e: Exception) { e.printStackTrace() null } }
注意事项
- 构造
JSONObject的put方法会抛出异常,必须做捕获处理 - 实际业务使用时,替换示例中的固定卡号、有效期等参数为你的动态业务值即可
- 如果开启了代码混淆,需要配置规则避免混淆
org.json相关类,防止序列化异常 - 最终构造出的
rootJson可以直接调用toString()方法转换为字符串,传递给Web服务接口使用
内容的提问来源于stack exchange,提问作者Maha Rani
相关产品推荐
相关产品推荐

