【问题标题】:java to extract value from string [duplicate]java从字符串中提取值[重复]
【发布时间】:2020-03-30 09:05:02
【问题描述】:

我有如下值的字符串

String s1 = "{"measurements": ["528391^MDC_DEV_SPEC_PROF^M12343"], "metrics": ["150021^MDC_PRESS_BLD_NONIN234^MDC", "150022^MDC_PRESS_BLD_NONINV_DIA^MDC", "150023^MDC_PRESS_BLD_12344^MDC", "149546^MDC_PULS_RATE_INV^MDC"], "accessoryTypes": [] }"

我只需要测量值 即我的结果应该是:528391^MDC_DEV_SPEC_PROF^M12343

请帮助解决这个问题。

【问题讨论】:

  • 这能回答你的问题吗? How to parse JSON in Java
  • 不...不是 JSON,纯字符串是上述格式
  • 考虑到你的问题,它确实看起来像字符串格式的 JSON

标签: java string selenium


【解决方案1】:

如果您的文本始终采用该格式并且您不想使用 JSON 对其进行解析,那么您可以执行以下操作。

进行您自己的错误检查和完整性检查。 (处理是否存在空格、未找到搜索键等)

 public static void main(String []args){ 


    String s1 = " \"{\"measurements\": [\"528391^MDC_DEV_SPEC_PROF^M12343\"], \"metrics\": [\"150021^MDC_PRESS_BLD_NONIN234^MDC\", \"150022^MDC_PRESS_BLD_NONINV_DIA^MDC\", \"150023^MDC_PRESS_BLD_12344^MDC\", \"149546^MDC_PULS_RATE_INV^MDC\"], \"accessoryTypes\": [] }\"";

    String testString = "measurements\": [\"";
    String endString = "\"],";

    System.out.println(s1);


    String result = getValue(s1, testString, endString);

    System.out.println("RESULT = "+result);

 }

 public static String getValue(String s1, String keyString, String endString){

    int from = s1.indexOf(keyString) + keyString.length(); 
    int to = s1.substring(from).indexOf(endString); 
    return s1.substring(from, from+to); 

 }

你的结果将如下所示

$java -Xmx128M -Xms16M HelloWorld
 "{"measurements": ["528391^MDC_DEV_SPEC_PROF^M12343"], "metrics": ["150021^MDC_PRESS_BLD_NONIN234^MDC", "150022^MDC_PRESS_BLD_NONINV_DIA^MDC", "150023^MDC_PRESS_BLD_12344^MDC", "149546^MDC_PULS_RATE_INV^MDC"], "accessoryTypes": [] }"
RESULT = 528391^MDC_DEV_SPEC_PROF^M12343

【讨论】:

  • 我还记得你的大help!!!
【解决方案2】:

你可以用org.json解析这个字符串:

public Example parseJSON(String JSONString){
    Example example = new Example();
    JSONObject jsonObject = new JSONObject(JSONString);
    JSONArray measurementsJSON = jsonObject.getJSONArray("measurements");
    JSONArray metricsJSON = jsonObject.getJSONArray("metrics");
    JSONArray accessoryTypesJSON = jsonObject.getJSONArray("accessoryTypes");

    String[] measurements = new String[measurementsJSON.length()];
    for(int i = 0; i < measurementsJSON.length; i++){
        measurements[i] = measurementsJSON.getString(i);
    }
    String[] metrics = new String[metricsJSON.length()];
    for(int i = 0; i < metricsJSON.length; i++){
        metrics[i] = metricsJSON.getString(i);
    }
    String[] accessoryTypes = new String[accessoryTypesJSON.length()];
    for(int i = 0; i < accessoryTypesJSON.length; i++){
        accessoryTypes[i] = accessoryTypesJSON.getString(i);
    }

    example.setMeasurements(Arrays.asList(measurements));
    example.setMetrics(Arrays.asList(metrics));
    example.setAccessoryTypes(Arrays.asList(accessoryTypes));

    return example;
}

示例类:

public class Example {

private List<String> measurements = null;
private List<String> metrics = null;
private List<String> accessoryTypes = null;

public List<String> getMeasurements() {
    return measurements;
}

public void setMeasurements(List<String> measurements) {
    this.measurements = measurements;
}

public List<String> getMetrics() {
    return metrics;
}

public void setMetrics(List<String> metrics) {
    this.metrics = metrics;
}

public List<String> getAccessoryTypes() {
    return accessoryTypes;
}

public void setAccessoryTypes(List<String> accessoryTypes) {
    this.accessoryTypes = accessoryTypes;
}

}

示例类是使用jsonschema2pojo 生成的。 要获得测量结果,请致电:

Example example = parseJSON(input);
    example.getMeasurements();

这是用核心 Java 制作的。但是,我真的建议您使用一些 JSON 2 对象库。

【讨论】:

    【解决方案3】:

    首先:创建一个与您的 JSON 匹配的类(您必须至少完成作业并与您的初始请求一起发布)

    第二:决定存储你的 JSON(文件…)因为你的字符串不是一个构建良好的字符串

    第三:选择一个库(GSON 或核心 java...)来提取 JSON 2 对象

    【讨论】:

      【解决方案4】:

      您可以将您的字符串传递给该类并从那里获取一个 DTO 对象

      import com.google.gson.GsonBuilder;
      
      GsonBuilder gsonBuilder = new GsonBuilder();
              MeasurementsDTO measurementsDTO = gsonBuilder.create().fromJson(s1,
                      MeasurementsDTO.class);
      

      【讨论】:

        【解决方案5】:

        干净的方法应该将其解析为 json,但如果这过于工程化,那么您可以编写一个带有正则表达式的匹配器,如下所示:

        public String parseMeasurements(String s) {
            final Matcher matcher  = Pattern.compile("\"measurements\": \[\"(.*?)\"\]").matcher(s);
            return matcher.group(1);
        }
        

        请检查括号是否正确转义,以及正则表达式是否不是“贪婪”而是“懒惰”,以便停止匹配第一个右括号。这 ”?” in "(.*?)" 应该让它变得懒惰

        【讨论】:

          猜你喜欢
          • 2015-01-30
          • 1970-01-01
          • 1970-01-01
          • 2020-11-26
          • 2018-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多