Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jackson创建json对象_Java_Json_Hashmap_Jackson - Fatal编程技术网

Java 使用jackson创建json对象

Java 使用jackson创建json对象,java,json,hashmap,jackson,Java,Json,Hashmap,Jackson,如何使用jackson创建一个json数组,如下面的示例所示 我尝试使用ObjectMapper,但这似乎不正确 try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) { for (Path file : ds) { System.out.println("name:"+file.getFileName()+

如何使用jackson创建一个json数组,如下面的示例所示

我尝试使用ObjectMapper,但这似乎不正确

      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);
        }
下面是我提供的一个json示例

"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
    }
]
编辑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.
        }
最终答案

    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"; 
    }
Map filesMap=newhashmap();
列表文件=新的ArrayList();
System.out.println(“\n未应用过滤器:”);
try(DirectoryStream ds=Files.newDirectoryStream(path)){
用于(路径文件:ds){
Map fileInfo=newhashmap();
fileInfo.put(“name”,file.getFileName().toString());
System.out.println(“名称:”+file.getFileName().toString()+
“\n”+
“mime:+Files.probeContentType(文件)+
“\n”+
锁定:“+!Files.isWritable(file));
添加(fileInfo);
}
}捕获(IOE异常){
系统错误println(e);
}
toArray()文件;
filesMap.put(“文件”,files);
ObjectMapper mapper=新的ObjectMapper();
字符串jsonString;
试一试{
jsonString=mapper.writeValueAsString(fileMap);
}捕获(IOE异常){
jsonString=“失败”;
}

您可以将对象写入json字符串。因此,我希望您的数据位于根据需要定义的类的对象中。以下是如何将该对象转换为json字符串:

//1. Convert Java object to JSON format
ObjectMapper mapper = new ObjectMapper();

String jsonString = mapper.writeValueAsString(yourObject);
有关完整的jackson数据绑定javadoc,请参阅。

您需要:

此类具有创建
ArrayNode
s、
ObjectNode
s、
IntNode
s、
DecimalNode
s、
TextNode
s等的方法
ArrayNode
s和
ObjectNode
s具有方便的变异方法,可以直接添加大多数JSON原语(非容器)值,而无需经过工厂(在内部,它们引用此工厂,这就是原因)


至于
ObjectMapper
,请注意它既是序列化程序(
ObjectWriter
)又是反序列化程序(
ObjectReader
)。

无需创建POJO并将其转换为JSON即可。我假设您的数据在记录对象中

        JsonNode rootNode = mapper.createObjectNode();
        ArrayNode childNodes = mapper.createArrayNode();
        for (Record record : records) {
            JsonNode element = mapper.createObjectNode();
            ((ObjectNode) element).put("mime": record.getDirectory());
                  //fill rest of fields which are needed similar to this.
                  //Also here record.getDirectory() method will should return "directory"
                  //according to your json file.
            childNodes.add(element);
        }
        ((ObjectNode) rootNode).put("files", childNodes);

将JSON对象初始化为单例实例,并构建它:

ObjectNode node=JsonNodeFactory.instance.ObjectNode();//初始化
node.put(“x”,x);//建筑

PS:println use
node.toString()

您的问题似乎缺少一个实际问题。对不起,今晚我遇到了太多的互联网问题,我想我忘了添加这一点:P现在有意义了吗?我很困惑。这里没有明显使用
ObjectMapper
。您是否正在尝试将某些内容转换为使用
ObjectMapper
或什么?您已经显示了所需的输入和输出,但没有显示您实际尝试的内容:实际转换代码。你看完了吗?我看完了教程,它很有帮助,虽然还不是很好,但是很接近。这让我非常接近,但出于某种原因,我在子对象周围有额外的引号。我在上面添加了我目前拥有的内容。@DirkLachowski Yep:)我将其放在“编辑1”下描述的底部,额外的引号是因为我使用了ObjectMapper两次。删除内部writeValueAsString后,我能够得到预期的结果。谢谢你的帮助。事实上,我会把这个问题作为答案,因为当我给它评分时,另一个答案造成了不可预见的问题。这是我使用的最终答案:)
//1. Convert Java object to JSON format
ObjectMapper mapper = new ObjectMapper();

String jsonString = mapper.writeValueAsString(yourObject);
final JsonNodeFactory factory = JsonNodeFactory.instance;
        JsonNode rootNode = mapper.createObjectNode();
        ArrayNode childNodes = mapper.createArrayNode();
        for (Record record : records) {
            JsonNode element = mapper.createObjectNode();
            ((ObjectNode) element).put("mime": record.getDirectory());
                  //fill rest of fields which are needed similar to this.
                  //Also here record.getDirectory() method will should return "directory"
                  //according to your json file.
            childNodes.add(element);
        }
        ((ObjectNode) rootNode).put("files", childNodes);