【问题标题】:spliting and customizing a string buffer in Java by JSON parser?通过 JSON 解析器在 Java 中拆分和自定义字符串缓冲区?
【发布时间】:2018-04-23 10:39:11
【问题描述】:

我有一个字符串缓冲区(有效负载)如下:

"SQN":922,"Node_ID":"cc000000000000000000000000000002","Energy":"5.00","Power":"1.80","Sign":"6d226becaf5a5b..."

现在我想自定义如下:

String part_1 = "{9 spaces}922{3 spaces}5.00{3 spaces}1.80"
String part_2 = "6d226becaf5a5b..."

最好的解决方案是什么?

我按照用户 Martin P 的建议尝试了这个:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.json.JSONArray.*;
import org.json.JSONException;
import org.json.JSONObject.*;
import org.json.JSONString;

String input = "{\"SQN\":922,\"Node_ID\":\"cc000000000000000000000000000002\",\"Energy\":\"5.00\",\"Power\":\"1.80\",\"Sign\":\"6d226becaf5a5b...\"}";

        JSONParser obj = ((Object) new JSONParser().parse(input)).getAsJsonObject();
        String sqnString = jsonObjectToString(obj, "SQN");
        String energyString = jsonObjectToString(obj, "Energy");
        String powerString = jsonObjectToString(obj, "Power");
        String signString = jsonObjectToString(obj, "Sign");

        StringBuilder sb = new StringBuilder();
        sb.append("{whatever we need}").append(sqnString).append("{whatever we need}").append(energyString).append("{whatever we need}").append(powerString);
        String part_1 = sb.toString();
        String part_2 = signString;

        System.out.println(part_1);
        System.out.println(part_2);

但是,getAsJsonObject()jsonObjectToString(obj, "SQN") 是未定义的。

【问题讨论】:

  • 看起来你需要一个 JSON 解析器
  • @XtremeBaumer 谢谢。你能再解释一下吗?
  • 您使用 json 解析器来解析您的字符串并将其映射到 POJO。那么您可以更轻松地访问所有部分
  • @XtremeBaumer 因为我不熟悉 JSON 解析器,请您回答一下好吗?如果可能并且不难,谢谢
  • @sas 请参阅stackoverflow.com/questions/2591098/how-to-parse-json-in-java。 Gson 和 Jackson 是最常用的。

标签: java json string split buffer


【解决方案1】:

看起来您可以将其解析为 Json。

我使用 Gson 来执行此操作。这是maven的链接:Gson maven

请注意,我将您的字符串包裹在大括号 ( { } ) 中以便稍后将其解析为 json

示例代码:

String input = "{\"SQN\":922,\"Node_ID\":\"cc000000000000000000000000000002\",\"Energy\":\"5.00\",\"Power\":\"1.80\",\"Sign\":\"6d226becaf5a5b...\"}";

    JsonObject obj = new JsonParser().parse(input).getAsJsonObject();
    String sqnString = jsonObjectToString(obj, "SQN");
    String energyString = jsonObjectToString(obj, "Energy");
    String powerString = jsonObjectToString(obj, "Power");
    String signString = jsonObjectToString(obj, "Sign");

    StringBuilder sb = new StringBuilder();
    sb.append("{whatever you need}").append(sqnString).append("{whatever you need here}").append(energyString).append("{something else}").append(powerString);
    String part_1 = sb.toString();
    String part_2 = signString;

    System.out.println(part_1);
    System.out.println(part_2);
}

private static String jsonObjectToString(JsonObject obj, String name) {
    return obj.getAsJsonPrimitive(name).getAsString();
}

结果输出:

{随便你需要什么}922{这里随便你}5.00{别的}1.80

6d226becaf5a5b...

【讨论】:

  • 谢谢。由于我收到 JsonObject 错误,您现在是否需要下载相关的 jar 文件?
  • 您能否编辑您的原始帖子并提供更多详细信息,例如代码 sn-p 和错误消息?
  • 您正在尝试使用我在导入 org.json 库时使用 Gson 库编写的代码。你不能那样做。要么更改您的代码以与 org.json 实现兼容,要么改用 Gson 库。
  • jsonObjectToString 怎么样?它仍然不被认为是一种方法。我导入了 import com.google.gson.Gson;导入 com.google.gson.GsonBuilder;导入 com.google.gson.JsonElement;导入 com.google.gson.JsonObject;导入 com.google.gson.JsonParser;
  • 看我的代码sn-p,是我自己提供的方法
猜你喜欢
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2013-04-14
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多