La création d'un objet json à l'aide de jackson
Comment puis-je créer un tableau json comme dans l'exemple ci-dessous à l'aide de jackson.
J'ai essayé d'utiliser ObjectMapper, mais cela ne semble pas correct.
try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) {
for (Path file : ds) {
System.out.println("name:"+file.getFileName()+
"\n"+
"mime:"+Files.probeContentType(file)+
"\n"+
"locked:"+!Files.isWritable(file));
}
} catch (IOException e) {
System.err.println(e);
}
Finalement, je vais faire un json qui a les valeurs ci-dessous.
* - (int) size file size in b. required
* - (int) ts file modification time in unix time. required
* - (string) mime mimetype. required for folders, others - optionally
* - (bool) read read permissions. required
* - (bool) write write permissions. required
* - (bool) locked is object locked. optionally
* - (bool) hidden is object hidden. optionally
* - (string) alias for symlinks - link target path relative to root path. optionally
* - (string) target for symlinks - link target path. optionally
Voici un exemple json j'ai été fournis.
"files": [
{
"mime": "directory",
"ts": 1334071677,
"read": 1,
"write": 0,
"size": 0,
"hash": "l1_Lw",
"volumeid": "l1_",
"name": "Demo",
"locked": 1,
"dirs": 1
},
{
"mime": "directory",
"ts": 1334071677,
"read": 1,
"write": 0,
"size": 0,
"hash": "l1_Lw",
"volumeid": "l1_",
"name": "Demo",
"locked": 1,
"dirs": 1
},
{
"mime": "directory",
"ts": 1340114567,
"read": 0,
"write": 0,
"size": 0,
"hash": "l1_QmFja3Vw",
"name": "Backup",
"phash": "l1_Lw",
"locked": 1
},
{
"mime": "directory",
"ts": 1310252178,
"read": 1,
"write": 0,
"size": 0,
"hash": "l1_SW1hZ2Vz",
"name": "Images",
"phash": "l1_Lw",
"locked": 1
},
{
"mime": "application\/x-genesis-rom",
"ts": 1310347586,
"read": 1,
"write": 0,
"size": 3683,
"hash": "l1_UkVBRE1FLm1k",
"name": "README.md",
"phash": "l1_Lw",
"locked": 1
}
]
EDIT 1
Map<String, Object> filesMap = new HashMap<>();
List<Object> files = new ArrayList<Object>();
System.out.println("\nNo filter applied:");
try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) {
for (Path file : ds) {
Map<String, Object> fileInfo = new HashMap<>();
fileInfo.put("name", file.getFileName().toString());
// Prints Files in Director
// Files.getAttribute(file,"size");
System.out.println("name:" + file.getFileName().toString() +
"\n" +
"mime:" + Files.probeContentType(file) +
"\n" +
"locked:" + !Files.isWritable(file));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(fileInfo);
files.add(json);
}
} catch (IOException e) {
System.err.println(e);
}
files.toArray();
filesMap.put("files", files);
ObjectMapper mapper = new ObjectMapper();
String jsonString;
try {
jsonString = mapper.writeValueAsString(filesMap);
} catch (IOException e) {
jsonString = "fail"; //To change body of catch statement use File | Settings | File Templates.
}
Met de la manière suivante json qui est la plus proche, mais je ne peux pas comprendre pourquoi les guillemets supplémentaires avant et après les {}.
{"files":["{\"name\":\"32C92124-EFCF-42C1-AFD2-8B741AE6854B.jpg\"}","{\"name\":\"58D5B83F-4065-4D6E-92BE-8181D99CB6CB.jpg\"}","{\"name\":\"7B1464A0-FBA1-429E-8A39-3DE5B539FBF8.jpg\"}","{\"name\":\"888159CF-45BE-475F-8C6A-64B3E1D97278.jpg\"}"]}
Réponse Finale
Map<String, Object> filesMap = new HashMap<>();
List<Object> files = new ArrayList<Object>();
System.out.println("\nNo filter applied:");
try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) {
for (Path file : ds) {
Map<String, Object> fileInfo = new HashMap<>();
fileInfo.put("name", file.getFileName().toString());
System.out.println("name:" + file.getFileName().toString() +
"\n" +
"mime:" + Files.probeContentType(file) +
"\n" +
"locked:" + !Files.isWritable(file));
files.add(fileInfo);
}
} catch (IOException e) {
System.err.println(e);
}
files.toArray();
filesMap.put("files", files);
ObjectMapper mapper = new ObjectMapper();
String jsonString;
try {
jsonString = mapper.writeValueAsString(filesMap);
} catch (IOException e) {
jsonString = "fail";
}
- Votre question semble manquer une réelle question.
- Désolé, avec la pléthore de questions relatives à l'internet, je vais avoir ce soir, je crois que j'ai oublié d'ajouter que. :P-T-elle plus de sens aujourd'hui?
- Je suis assez confus. Il n'est pas évident utilisation de
ObjectMapper
ici. Êtes-vous essayer de convertir quelque chose à utiliserObjectMapper
ou quoi? - Vous avez démontré votre choix d'entrée et de sortie, mais rien de ce que vous avez fait la tentative de re: code de conversion réel. Avez-vous lu à travers les Jackson dans Cinq Minutes tutoriel?
- Je suis allé dans le tutoriel et c'est d'aider, pas encore là, mais proche.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'un
JsonNodeFactory
:Cette classe possède des méthodes pour créer
ArrayNode
s,ObjectNode
s,IntNode
s,DecimalNode
s,TextNode
s et autres joyeusetés.ArrayNode
s etObjectNode
s avoir la commodité de la mutation des méthodes permettant d'ajouter directement la plupart JSON primitive (non conteneur) valeurs sans avoir à passer par l'usine (enfin, en interne, elles font référence à cette usine, c'est pourquoi).À un
ObjectMapper
, notez qu'il est à la fois un sérialiseur (ObjectWriter
) et deserializer (ObjectReader
).Vous pouvez écrire un objet à une chaîne json. Donc j'espère que vous avez vos données dans un objet d'une classe définie selon votre besoin. Voici comment vous pouvez convertir l'objet en une chaîne json:
Voir ici pour la pleine jackson-databind javadoc.
Vous pouvez le faire sans créer de POJO et de la convertir en JSON. Je suppose que vos données dans l'Enregistrement de l'objet.
initialisation de l'objet JSON comme instance du singleton, la construction:
PS: pour println utilisation
node.toString()
.