Вы также можете десериализовать этот Json как Map
с readValue(..)
, если readTree(..)
не является обязательным требованием, например:
@Test
public void test() throws Exception {
ObjectMapper jsonMapper = new ObjectMapper();
// JSON contains this kind of a structure
Map<String, List<Map<String, Object>>> map = jsonMapper
// test.json should be in the same package as test and contain
// your Json
.readValue(getClass().getResourceAsStream("test.json"), Map.class);
// Result of this loggion below
map.entrySet().forEach(entry -> {
log.info("key: {}", entry.getKey());
entry.getValue().forEach(person -> {
log.info(" {} attending: {}", person.get("name"), person.get("attending"));
});
});
}
Журнал должен иметь вид:
[ 1111] ключ: первый
законопроект присутствующий: ложный
фред присутствующий: ложный
майк присутствующий: ложный
ключ: второй
Алан присутствовал: ложьblockquote>
Да, вы можете применить ограничение, только если значение не равно NULL. Это можно легко проверить на следующем примере:
CREATE DATABASE t;
USE t;
CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT NULL,
parent_id INT NULL,
FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;
INSERT INTO child (id, parent_id) VALUES (1, NULL);
-- Query OK, 1 row affected (0.01 sec)
INSERT INTO child (id, parent_id) VALUES (2, 1);
-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key
-- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY
-- (`parent_id`) REFERENCES `parent` (`id`))
Первая вставка пройдет, потому что мы вставляем NULL в parent_id
. Вторая вставка не удалась из-за ограничения внешнего ключа, поскольку мы пытались вставить значение, которого нет в родительской таблице
.
Да, значение может быть НУЛЕВЫМ, но необходимо быть явными. Я испытал эту ту же ситуацию прежде, и легко забыть, ПОЧЕМУ это происходит, и таким образом, требуется немного для запоминания что потребности быть сделанным.
, Если отправленные данные брошены или интерпретированы как пустая строка, они перестанут работать. Однако путем явной установки значения в NULL при ВСТАВКЕ или ОБНОВЛЕНИИ, Вы хороши для движения.
, Но это интересно запрограммировать, не так ли? Создание наших собственных проблем и затем фиксация их!Удачи!
Да, это будет работать так, как вы ожидаете. К сожалению, я, кажется, не могу найти явное утверждение этого в руководстве по MySQL.
Внешние ключи означают, что значение должно существовать в другой таблице. NULL означает отсутствие значения, поэтому, когда вы устанавливаете столбец в NULL, не имеет смысла пытаться накладывать на него ограничения.