【发布时间】:2014-01-07 10:13:44
【问题描述】:
我有一个宏,它从 JIRA 中获取整个问题信息(作为 JSON 对象)并在 Confluence 中打印出来。但是在 Confluence 中,新的行丢失了,格式也一团糟。
这是 Jira 中的文本(以及它的外观):
报告随后通过 ftp 发送给 Aviva 风险管理团队。
Aviva 风险团队使用每日报告提取一些数字 以及投资组合的风险绩效报告。
这是它在 JSON 中的样子:
报告随后通过 ftp 发送到 Aviva 风险管理 团队。\r\n\r\nAviva 风险团队使用每日报告来提取一些 数字和投资组合风险绩效报告。
这就是之后打印的内容:
报告随后通过 ftp 发送给 Aviva 风险管理团队。 Aviva 风险团队使用每日报告提取一些数字 以及投资组合的风险绩效报告。
所以基本上,我从中得到的是,\n\r 符号丢失或没有按照它们在 Confluence 中应有的方式进行转换。我该如何解决?
编辑:@Octopus 这是代码。
public class FieldinfoMacro implements Macro {
@Override
@SuppressWarnings("unchecked")
// This macro gets the issue's field values from the page's context so you don't have to
// make new requests to Jira for each field seperately
public String execute(Map<String, String> par, String s, ConversionContext conversionContext)
throws MacroExecutionException {
// parameters
String add = (String) par.get("getfield").toLowerCase();
HashMap<String, String> fieldMap = (HashMap<String, String>) conversionContext.getProperty("fieldMap");
JSONObject issue = (JSONObject) conversionContext.getProperty("issueJson");
Object output = null;
Object result = null;
StringBuilder temp = new StringBuilder();
/* if (add.equals("reporter") || add.equals("assignee") || add.equals("account manager")) {
try {
output = issue.getJSONObject("fields").get(fieldMap.get(add));
result = ((JSONObject) output).get("emailAddress");
result = ((String) result).replaceAll("@.*", "");
result = ((String) result).replaceAll("\\W", " ");
} catch (JSONException je) {
je.printStackTrace();
}
} else { */
// get the requested field value from the issue
// there's a handler for the different types of returned data
// i.e. JSONObject, JSONArray, String
try {
output = issue.getJSONObject("fields").get(fieldMap.get(add));
// String handler
if (output instanceof String) {
result = output;
// JSONArray handler (covered different cases)
} else if (output instanceof JSONArray) {
for (int i = 0; i < ((JSONArray) output).length(); i++) {
if (((JSONArray) output).get(i) instanceof JSONObject) {
result = ((JSONArray) output).getJSONObject(i).getString("value");
} else {
if (((JSONArray) output).length() < 2) {
temp.append(((JSONArray) output).getString(i));
} else if (i < ((JSONArray) output).length() - 1) {
temp.append(((JSONArray) output).getString(i) + ", ");
} else temp.append(((JSONArray) output).getString(i));
result = temp;
}
}
// JSONObject handler
} else if (output instanceof JSONObject) {
result = ((JSONObject) output).getString("value");
}
} catch (JSONException je) {
je.printStackTrace();
}
return result.toString();
}
【问题讨论】:
-
作为JSON is not capable of storing multiline strings,JSON 编码形式并不让我感到惊讶。 “打印的内容”似乎是由于打印处理器无法正确处理换行符造成的。
标签: java json formatting jira confluence