Вам необходимо сохранить корневой узел. В вашем примере выведите переменную 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"
} ]
}
What you should do is create an imap of a certain key to a series of commands, in this case the commands will drop you into normal mode, delete the current word and then put you back in insert:
:imap <C-d> <C-[>diwi
Не совсем уверен, что вы использовали «до» и «после», но вы пробовали
dw
?
Редактировать: Я думаю, вы ищете что-то, чтобы использовать в режиме вставки , Как ни странно, в документах ничего не найдено, кажется, что ctrl-w - это все, что есть.
Для удаления определенного количества символов перед курсором вы можете использовать X. Для удаления определенного количества слов после курсора вы можете использовать dw (несколько слов например, можно удалить, используя 3dw для 3 слов). Для удаления вокруг курсора в целом, вы можете использовать галку.
Нижеследующее работает для нормального режима: Я согласен с ответом Дэна Олсона, что вы, вероятно, должны быть в нормальный режим для большинства удалений. Более подробно ниже.
Если курсор находится внутри слова:
diw
для удаления в слове (без пробелов)
daw
для удаления вокруг слова (включая пробелы перед следующее слово).
Если курсор находится в начале слова, просто нажмите dw
.
Это можно умножить, добавив обычные числа для движения, например, 2w для перемещения вперед 2 словами, поэтому d2w удаляет два слова.
Режим вставки ^ w
Идея использования hjkl для перемещения в Vim состоит в том, что более продуктивно держать руки на домашнем ряду. В конце слова ^ отлично работает, чтобы быстро удалить слово. Если ты'
Если вы находитесь в обычном режиме и хотите изменить слово, вы можете просто использовать c
(изменить), а не d
(удалить), если вы хотите полностью изменить слово и снова войдите в режим вставки, не нажимая i
, чтобы вернуться к печати.
Нормальный режим:
daw : delete the word under the cursor
caw : delete the word under the cursor and put you in insert mode
Не похоже, что есть встроенный способ сделать это в режиме вставки, о чем был вопрос. Некоторые из других ответов верны для нормального режима, а также указывают на то, что можно создать настраиваемое сопоставление для добавления функций в режиме вставки.
Честно говоря, вам, вероятно, следует выполнять большую часть удаления в обычном режиме. ^ W полезно знать, но я не уверен, что могу придумать ситуацию, когда я бы предпочел сделать это, чем esc, чтобы перейти в нормальный режим и иметь в своем распоряжении более мощные команды удаления.
Vim очень хорош этим отличается от ряда других редакторов (включая TextMate). Если вы используете его продуктивно, вы, вероятно, обнаружите, что не проводите много времени в режиме вставки.
В старом vi, b
перемещает курсор в начало слова перед курсором, w
перемещает курсор в начало слова после курсор, e
перемещает курсор в конец слова после курсора, а dw
удаляет от курсора до конца слова.
Если вы наберете wbdw
], вы удаляете слово вокруг курсора, даже если курсор находится в начале или в конце слова. Обратите внимание, что пробелы после слова считаются частью слова, которое необходимо удалить.
Принятый ответ завершается ошибкой при попытке повторить удаление слов попробуйте вместо этого следующее решение:
" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw
Он отображает CTRL-BackSpace, также работает в нормальном режиме.