Escenarios de uso y negocios de JSONObject y JSONArray

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>          

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

Tipo de pago Huabei + 6 cuotas para obtener la tarifa correspondiente

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 JSONArray
  • String getString(int index): Devuelve el elemento en la posición especificada y convierte el elemento Object original en un elemento String
  • JSONArray 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.

Supongo que te gusta

Origin blog.csdn.net/qq_44384533/article/details/111152885
Recomendado
Clasificación