Se requiere un pago a plazos comercial recientemente adquirido por tipo de pago , períodos de estadificación para encontrar las tarifas correspondientes . Implica el uso de JSONObject y JSONArray.
Introduce la dependencia fastjson, El siguiente código de copiar y pegar pom.xml <dependencies>... </dependencies>
en
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
Directorio de artículos
1. Aplicación de escenario empresarial
La cadena json transmitida por el servicio de pago a plazos es la siguiente:
{
"花呗": [{
//分期支付产品类型
"instalmentNum": "6期", //分期的期数
"repaymentRate": "20.50%" //费率
}, {
"instalmentNum": "12期",
"repaymentRate": "25.00%"
}, {
"instalmentNum": "24期",
"repaymentRate": "13.00%"
}, {
"instalmentNum": "36期",
"repaymentRate": "18.00%"
}]
}
(Los valores anteriores se crean casualmente, el enfoque está en cómo usar JSONObject y JSONArray a continuación)
Ahora tengo que pagar por tipo de cuotas (un canto), períodos de estadificación (6) para encontrar la tasa correspondiente del 20,50%
Eliminar pasos de Tasa 20.50% :
- Primero, obtenga el valor correspondiente a Huabei: {"Huabei": valor} El conjunto es un JSONObject, en forma de un par clave-valor
- El "canto de flores" correspondiente al valor es un JSONArray,
形式如: [ {key:value}, {}, {} ]
donde los corchetes son el representante de un JSONArray, el arreglo dentro de cada par clave-valor es una forma de {clave: valor}, es un tipo java.lang.Object
El proyecto usa fastjson, por lo que el siguiente método también se basa en este paquete jar
//入参repaymentRate是上面的那个json串
private static matchRepaymentRate(String repaymentRate){
//先拿到repaymentRate对应的json键值对形式{ "花呗": value }
JSONObject jsonObject=JSONObject.parseObject(repaymentRate);
//再拿到key(花呗)对应的value,是一个JSONArray,形如[{key:value},{..},{..}]
JSONArray jsonArray=jsonObject.getJSONArray("花呗");
for(int i=0;i<jsonArray.size();i++){
//得到数组的第i个元素,即{"instalmentNum": "6期","repaymentRate": "20.50%"}
JSONObject jsonObj= jsonArray.getJSONObject(i);
String instalmentNum=jsonObj.getString("instalmentNum");
if(instalmentNum.equals("6期")){
System.out.println("分期支付的类型是花呗 、分期6期得到的费率为:"+jsonObj.getString("repaymentRate"));
}
}
}
Tipo de pago (algún canto) + 6 cuotas => la tasa es del 20,50%, el resultado es el siguiente
En segundo lugar, JSONObject
JSONObject es un par clave-valor, que tiene la forma de {clave: valor}. Más adelante, cuando veas {} llaves, se puede considerar como un JSONObject.
esoEl interior es en realidad un mapa Map <String, Object>, Puede ser HashMap o LinkedHashMap
Método de construcción
- Construcción predeterminada: lo que obtiene es un HashMap con una capacidad inicial de 16,
public JSONObject() { this(16, false); }
donde falso es construir un HashMap y verdadero es construir un LinkedHashMap - La designación artificial es construir un HashMap o un LinkedHashMap (pero no se puede especificar la capacidad inicial):
public JSONObject(boolean ordered) { this(16, ordered); }
- Especifique manualmente la capacidad de HashMap (no LinkedHashMap):
public JSONObject(int initialCapacity)
- Al mismo tiempo, se puede especificar la capacidad inicial y el tipo de contenedor:
public JSONObject(int initialCapacity, boolean ordered) {
if (ordered) {
this.map = new LinkedHashMap(initialCapacity);
} else {
this.map = new HashMap(initialCapacity);
}
}
JSONObject API de uso común
public Object get(Object key)
: Denominado método Map.get (clave)public JSONObject getJSONObject(String key)
: Obtención de un objeto JSONObject porque el valor de Map <Stirng, Object> es el Object, así que vuelva a emitir JSONObject , es decir, el valor (JSONObject)public JSONArray getJSONArray(String key)
: Obtenga una matriz JSONArray, el método devolverá un (JSONArray) map.get (key)
Hay otros getString (clave de cadena) y getDouble (clave de cadena) que convierten el valor del objeto al tipo correspondiente y devuelven
Tres, JSONArray
JSONArray es esencialmente uno List<Object>
, y la siguiente API también se basa en operaciones de lista
Método de construcción
Hay tres métodos de construcción:
- Estructura predeterminada:
public JSONArray() { this.list = new ArrayList(); }
- La estructura de una colección List se puede pasar en:
public JSONArray(List<Object> list) { this.list = list; }
- JSONArray (int initialCapacity) Establece la capacidad inicial de la Lista
JSONArray API de uso común
JSONObject getJSONObject(int index)
Obtenga el elemento en la posición especificada, usando conversión de tipo forzada: (JSONObject) list.get (index)JSONArray getJSONArray(int index)
: El elemento obtenido en la posición especificada es (JSONArray) list.get (index), una matriz JSONArrayString getString(int index)
: Devuelve el elemento en la posición especificada y convierte el elemento Object original en un elemento StringJSONArray getJSONArray(int index)
: Obtención de una matriz JSON anidada interna , tal que:
{
"成绩排名":[ //外层json数组
{
"第一名":[{
"姓名":"小明"},{
"学号":"1"}] //内层json数组
},{
"第二名":[{
"姓名":"二狗子"},{
"学号":"2"}]
}
]
}
Hay 2 niveles de JSONArray anidados en la cadena json, con 2 niveles de corchetes []. Si
quiero saber quién es el primero, la operación es la siguiente:
String str ="{\"成绩排名\": ... }"
JSONObject jsonObject=JSON.parseObject(str);
//拿到了外层json数组:[{"第一名":[{"姓名":"小明"},{"学号":"1"}]}, {..}]
JSONArray jsonArray=jsonObject.getJSONArray("成绩排名");
for(int i=0;i<jsonArray.size();i++){
JSONObject jsonObj=jsonArray.getJSONObject(i);
//拿到了内层的json数组:[{"姓名":"小明"},{"学号":"1"}]
JSONArray jsonArr =jsonObj.getJSONArray("第一名");
for(int j=0;jsonArr!=null&&j<jsonArr.size();j++){
//拿到了JSONObject {"姓名":"小明"}
JSONObject json =jsonArr.getJSONObject(j);
System.out.println(json.getString("姓名"));
}
}
Uso de JSONObject y JSONArray
(1) Agregue pares clave-valor a un objeto json y agregue objetos json a la matriz JSONArray
//json添加键值对
JSONObject jsonObject=new JSONObject();
jsonObject.put("key","value");
//在JSONArray添加json对象
JSONArray jsonArray=new JSONArray();
jsonArray.add(jsonObject);
(2) Convierta la cadena json de tipo String a JSONObject y JSONArray
① Convertir cadena a JSONObject
String str = "{ \"name\":\"小明\" }";
JSONObject jsonObject=JSON.parseObject(str);
② Convertir cadena a JSONArray
String str = "[{ \"name\":\"小明\" }]";
JSONArray jsonArray=JSON.parseArray(str);
System.out.println( jsonArray.getJSONObject(0));
Salida: {"name": "Bob"}, si no es la cadena json "[]" corchetes, no puede obtener el elemento de la ubicación especificada , ya sea jsonArray.get (0) o jsonArray.getJSONObject (0) Will throw una excepción, sin corchetes [], el formato es incorrecto.