Другое различие между Activity.runOnUiThread и view.post () заключается в том, что runnable в view.post () вызывается после того, как представление прикреплено к окну.
Вам необходимо сохранить корневой узел. В вашем примере выведите переменную jsonNode
. Ниже пример делает то же самое:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.File;
public class Json {
public static void main(String[] args) throws Exception {
File jsonFile = new File("test.json");
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
ObjectNode root = (ObjectNode) mapper.readTree(jsonFile);
// create new node item
ObjectNode newNode = new ObjectNode(mapper.getNodeFactory());
newNode.put("data1", 3);
newNode.put("data2", "DATA3");
// create new class item
FirstItem newItem = new FirstItem(4, "DATA4");
// get array node
ArrayNode firstArray = (ArrayNode) root.get("firstArray");
// add new ObjectNode
firstArray.add(newNode);
// add new POJO
firstArray.add(mapper.convertValue(newItem, JsonNode.class));
// serialise root
System.out.println(mapper.writeValueAsString(root));
}
}
class FirstItem {
private int data1;
private String data2;
public FirstItem(int data1, String data2) {
this.data1 = data1;
this.data2 = data2;
}
public int getData1() {
return data1;
}
public String getData2() {
return data2;
}
}
Над кодом печатается:
{
"firstArray" : [ {
"data1" : 1,
"data2" : "DATA"
}, {
"data1" : 2,
"data2" : "DATA2"
}, {
"data1" : 3,
"data2" : "DATA3"
}, {
"data1" : 4,
"data2" : "DATA4"
} ],
"secondArray" : [ {
"number" : 1,
"data" : "DATA3"
}, {
"number" : 2,
"data" : "DATA4"
} ],
"thirdArray" : [ {
"something" : 1,
"thatthing" : "DATA5"
}, {
"something" : 2,
"thatthing" : "DATA6"
} ]
}