如何在java上更新JSONArray值

时间:2016-08-12 08:27:03

标签: java arrays

任何人都可以帮助我,我是java编程的新手

假设我有以下数据的JSONArray:

[{
    "STATUSUPDATE": 0,
    "IDSERV": "2"
}, {
   "STATUSUPDATE": 0,
   "IDSERV": "3"
}, {
   "STATUSUPDATE": 0,
   "IDSERV": "1"
}]

如何在STATUSUPDATE 1

中将IDSERV更新为2

如何在STATUSUPDATE 2

中将IDSERV更新为3

并试图循环数据

for (int i=0; i < array.length; i++){
JSONObject itemArr = (JSONObject)array.get(j);
if(itemArr.get("IDSERV").equals(2)){
//should be itemArr.set(with new val) 
//but method *set* can cal; only on JSONArray not an JSONObject
//and looping the next one 
}
}

任何人都可以帮助我

4 个答案:

答案 0 :(得分:6)

JSONArray具体代码:

<强>输出

Initial array : [{"STATUSUPDATE":0,"IDSERV":"2"},{"STATUSUPDATE":0,"IDSERV":"3"},{"STATUSUPDATE":0,"IDSERV":"1"}]
Output array : [{"STATUSUPDATE":"1","IDSERV":"2"},{"STATUSUPDATE":"2","IDSERV":"3"},{"STATUSUPDATE":0,"IDSERV":"1"}]

<强>代码

public class Test {
    public static void main(String[] args) throws JSONException {
        JSONArray array = new JSONArray("[{\"STATUSUPDATE\":0,\"IDSERV\":\"2\"},{\"STATUSUPDATE\":0,\"IDSERV\":\"3\"},{\"STATUSUPDATE\":0,\"IDSERV\":\"1\"}]");
        System.out.println("Initial array : " + array);

        for (int i=0; i < array.length(); i++){
            JSONObject jsonObject = new JSONObject(array.get(i).toString());
            if(jsonObject.get("IDSERV").equals("2")) {
                jsonObject.put("STATUSUPDATE", "1");
                array.put(i, jsonObject);
            }
            else if(jsonObject.get("IDSERV").equals("3")) {
                jsonObject.put("STATUSUPDATE", "2");
                array.put(i, jsonObject);
            }
        }

        System.out.println("Output array : " + array);
    }
}

答案 1 :(得分:4)

以下是代码:

array是您的JSONArray

for (int i=0; i < array.length(); i++){
    JSONObject itemArr = (JSONObject)arr.get(i);
    if(itemArr.get("IDSERV").getAsString().equals("2")){
        itemArr.put("STATUSUPDATE", 1);
    }else if(itemArr.get("IDSERV").getAsString().equals("3")){
        itemArr.put("STATUSUPDATE", 2);
    }
}

现在,如果您打印array,则可以看到值已更改。

答案 2 :(得分:0)

使用正则表达式替换所有

package topic;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class SenderTopic {
  private ConnectionFactory factory = null;
  private Connection connection = null;
  private Session session = null;
  private Destination destination = null;
  private MessageProducer producer = null;

  private boolean jmsInitialized = false;

  public SenderTopic() {

  }

  private void initJMS() throws JMSException {
    factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
    connection = factory.createConnection();
    connection.start();
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    destination = session.createTopic("SAMPLE_TOPIC");
    producer = session.createProducer(destination);
    jmsInitialized = true;
  }

  private void sendMessage(String message) {
    if (!jmsInitialized) {
      try {
        initJMS();
        sendTextMessage(message);
      } catch (JMSException e) {
        jmsInitialized = false;
        e.printStackTrace();
      }
    }
  }

  private void sendTextMessage(String message) throws JMSException {
    TextMessage textMessage = session.createTextMessage(message);
    producer.send(textMessage);
  }

  public static void main(String[] args) throws IOException {
    SenderTopic receiver = new SenderTopic();

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    while (true) {
      String message = reader.readLine();
      receiver.sendMessage(message);
    }
  }

}

以上将找到并替换所有 IDSERV 字段 如果您只想查找并替换其中一个 IDSERV 字段,请将String json = ... json.replaceAll("(?<=\"IDSERV\":\")\\d*(?=\")", new value); 更改为\\d并将预期值设置为在大括号之间切换。
 例如:[]会查找并替换所有等于[1]的值。

<强> EDIT1:
好的,你刚刚编辑了这个问题。

此正则表达式允许您定位特定的IDSERV并更改其STATUSUPDATE字段。

1

在上文中,将数字(?<=:)\d*(?=,"IDSERV":"1") 更改为您要查找的IDSERV值。

在java中:

1

答案 3 :(得分:0)

在用户角色上,我曾经将某些字段的十进制值替换为零。它的工作

shimpment=shimpment.replaceAll("\"shipmentValue\":[0-9]+.[0-9]+", "\"shipmentValue\":0.00");
shimpment=shimpment.replaceAll("\"price\":[0-9]+.[0-9]+", "\"price\":0.00");
shimpment=shimpment.replaceAll("\"tax\":[0-9]+.[0-9]+", "\"tax\":0.00");