【问题标题】:Join a json String values with new line用新行加入 json 字符串值
【发布时间】:2017-04-02 21:06:09
【问题描述】:

我需要在新行中返回每个元素的 json 数组。而是在一行中打印。我尝试使用 '/n' 和空格,但它不起作用。

String json = null;
//split cookie with delimiter to store in array
String wl[] = wishList.split("~");

//JSON RETURN VALUE
json = "[\"";
for(int i = 0; i < wl.length; ++i) {
    json +=  wl[i];
    //tried but didn't work
    //json.split("\n");
}
json += "\"]";
System.out.println(json);

所以我尝试在 for 循环中进行 cancatinating,但没有成功。 我需要这样的

1.abc
2.bcd
3.efg

但我得到了这个输出

1.abcbcdefg

【问题讨论】:

  • 您阅读过String#split 文档吗?只需使用json += "\n"json += wl[i] + "\n"。你的问题标题也让我相信你认为json 是一个数组,它不是,它是一个String
  • 手动构建 JSON 是一种反模式。使用 Jackson 或 Gson 之类的库

标签: java arrays json newline


【解决方案1】:

您正在尝试做的(如果我做对了)是在 ~ 上拆分一个字符串并用它创建一个 JSON 数组(一个单独的行)。

你有没有想过简单地替换角色?

String json = "[" + wishlist.replace("~", ",\n") + "]"; //Added a , to separated each elements

但如果你想自己做,

String json = "[";
for(int i = 0; i < wl.length; ++i) {
    json +=  wl[i] + ",\n";
}
json += "]";

你需要添加 newLine 字符,而不是再次拆分它。

当然,正如所指出的,这应该使用库设计来完成,但这里是对代码的简单更正。

PS : 我没有写出需要的\" 是为了便于修改。但这可以很容易地添加到两种解决方案中。

【讨论】:

    【解决方案2】:

    我尝试使用“/n”和空格,但它不起作用。

    您应该在 JSON 字符串中使用 "\n" 来添加新行而不是 "/n",这不是一回事。你应该对正则表达式模式做同样的事情。

    3.行分隔符是 '\n'

    这意味着也支持“\r\n”,因为在解析 JSON 值时会忽略尾随空格。

    文件中的最后一个字符可能是行分隔符,它将是 就像没有行分隔符一样处理。

    来源:http://jsonlines.org/

    编辑

    Json 数组用逗号分隔数组的值,字符串应该在引号或双引号之间。但在开头和结尾都不需要“\”。
    你可以得到这个字符串:

    ["abc",
    "bcd",
    "efg"]
    

    使用此代码:

    final String STRING_DOUBLE_QUOTE="\"";
    String json = null;
    // split cookie with delimiter to store in array
    String wl[] = wishList.split("~");
    
    // JSON RETURN VALUE
    json = "[";
    for (int i = 0; i < wl.length; ++i) {
        if (!json.equals("[")) {
          json += ",\n";
        }
        json += STRING_DOUBLE_QUOTE + wl[i] + STRING_DOUBLE_QUOTE;
    }
    json += "]";
    
    System.out.println(json);
    

    【讨论】:

    • 我会指出这是一个错字,在注释代码中,他使用了正确的\n。但我不明白为什么要使用\\n 而不是\n
    • 没有理由。我的错误:)谢谢
    【解决方案3】:

    如果您希望它位于多行上,则必须将其保存在多个元素中,即一个数组。

    试试这个:

    String wl[] = wishList.split("~");
    
    for(int i = 0; i < wl.length; ++i){
         System.out.println(wl[i]);
    }
    

    不确定这是否是您所要求的,但这是您书面问题的答案

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 2022-11-20
      • 1970-01-01
      • 2022-11-30
      • 2021-12-10
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多