Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
如何将带有键值的JSON文件转换为apache骆驼头文件-Spring DSL_Json_Spring Boot_Apache Camel_Spring Camel - Fatal编程技术网

如何将带有键值的JSON文件转换为apache骆驼头文件-Spring DSL

如何将带有键值的JSON文件转换为apache骆驼头文件-Spring DSL,json,spring-boot,apache-camel,spring-camel,Json,Spring Boot,Apache Camel,Spring Camel,我有一个带有键值对的JSON文件,我想把键值对放在标题中。 因此,当我有一个包含以下内容的文件时: [{"msgId": "8600C5A3-C666-4E63-BFDB-52BCF557F938", "jiraId": "ERR002"}] 我想创建名为msgId、值为“8600C5A3-C666-4E63-BFDB-52BCF557F938”的标题 或者作为一种替代方法:是否有一种方法将exchange的标头存储到一个文件中,以后可以在另一个exchange中将标头还原到该文件中 多谢各位

我有一个带有键值对的JSON文件,我想把键值对放在标题中。 因此,当我有一个包含以下内容的文件时:

[{"msgId": "8600C5A3-C666-4E63-BFDB-52BCF557F938", "jiraId": "ERR002"}]
我想创建名为msgId、值为“8600C5A3-C666-4E63-BFDB-52BCF557F938”的标题

或者作为一种替代方法:是否有一种方法将exchange的标头存储到一个文件中,以后可以在另一个exchange中将标头还原到该文件中

多谢各位


编辑:我的示例分支

    public void jsonToHeaders(String body, @Headers Map<String, String> headers) throws ParseException {

        LOG.info("Starting JSON conversion...");
        LOG.debug("Body input, content: {} ", body);
        JSONParser parser = new JSONParser();
        JSONObject jsonObject = (JSONObject) parser.parse(body);
        if (jsonObject != null) 
        { 
            String stringValue = null;
            String stringKey = null ;
            final String NA_STRING = "*** N/A ***";

            for (Object key : jsonObject.keySet()) {

                stringKey = ((key == null) ? NA_STRING : (String)key);
                stringValue = ((jsonObject.get(stringKey) == null) ? NA_STRING : jsonObject.get(stringKey).toString());
                headers.put(stringKey, stringValue);
                LOG.debug("Processing key {} with value {}", stringKey, stringValue);
            }
            LOG.info("Done processed JSON: {}", headers.toString());
        }
    }
public void jsonToHeaders(字符串体,@Headers映射头)引发异常{
info(“开始JSON转换…”);
debug(“Body输入,内容:{}”,Body);
JSONParser=新的JSONParser();
JSONObject JSONObject=(JSONObject)parser.parse(body);
if(jsonObject!=null)
{ 
字符串stringValue=null;
字符串stringKey=null;
最终字符串NA_String=“***不适用***”;
for(对象键:jsonObject.keySet()){
stringKey=((key==null)?NA_STRING:(STRING)key);
stringValue=((jsonObject.get(stringKey)==null)?NA_字符串:jsonObject.get(stringKey.toString());
headers.put(stringKey、stringValue);
debug(“处理值为{}的键{}”,stringKey,stringValue);
}
info(“Done processed JSON:{}”,headers.toString());
}
}
您可以在这种情况下使用

海豆


包org.mybean;
导入org.apache.camel.Headers;
导入org.json.simple.JSONObject;
导入org.json.simple.parser.JSONParser;
导入org.json.simple.parser.ParseException;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Iterator;
导入java.util.Map;
导入java.util.Set;
公共类JSONToHeadersBean{
public void jsonToHeaders(字符串体,@Headers映射头)引发ParseException{
JSONParser=新的JSONParser();
JSONObject object=(JSONObject)parser.parse(body);
object.keySet().forEach(key->headers.put(key.toString(),object.get(key.toString());
}
//测试
公共静态void main(字符串[]args)引发异常{
字符串正文=“{\“msgId\”:\“8600C5A3-C666-4E63-BFDB-52BCF557F938\”,“jiraId\”:“ERR002\”;
JSONParser=新的JSONParser();
JSONObject object=(JSONObject)parser.parse(body);
最终映射头=新HashMap();
object.keySet().forEach(key->headers.put(key.toString(),object.get(key.toString());
System.out.println();
}
}
创建bean


你们可以在路线上使用它


您也可以将JSON解析为HashMap,并将其放入标题中:

.unmarshal().json(JsonLibrary.Jackson,java.util.Map.class)
.setHeader(“参数”,简单(“主体”))
(需要
依赖项)

要访问存储的值,请执行以下操作:

.log(LoggingLevel.INFO,“MsgId:${header.params[MsgId]}”)

我最初是在Spring DSL中寻找答案的,但是,看到这一点非常优雅,并且有空间向bean添加更多解析/转换UTIL,它满足并更喜欢(甚至)解决方案。我确实添加了一些NPE检查,首先是对JSONObject的检查,其次是对键的迭代。在某些情况下,密钥会导致空值,这对我来说是NPE。我的版本添加到了问题的底部,我想用JSON数据替换我的所有标题。但我真的很感激你的表现,谢谢你。