当前位置: 首页 > 知识库问答 >
问题:

优化Objectmapper[Java8]的字符串解析

海宁
2023-03-14

我实现了我试图实现的目标,然而,我不满足于不必要的(?)字符串解析来达到我的目标。

HttpURLConnection con = null;

URL url = new URL(URL);
con = (HttpURLConnection) url.openConnection();

// set connection parameters and make a GET-call
con.setRequestMethod("GET");

//Must be a better way?
InputStream inputStream = con.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));


StringBuilder response = new StringBuilder();
String currentLine;

//Build the string from the response from con
while ((currentLine = in.readLine()) != null)
       response.append(currentLine);

in.close();


ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(response.toString());

// I only want the child-node
String myArray = jsonNode.get("parent").get("child").toString();

// Map the response to my object
List<Car> car = objectMapper.readValue(myArray, new TypeReference<List<Car>>(){});

    null
jsonNode.get("parent").get("child").toString()
    null

我的汽车类:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "id",
        "color"})
public class Car {

    @JsonProperty("id")
    public String id;
    @JsonProperty("color")
    public String color;
}

共有1个答案

欧阳博超
2023-03-14

很高兴看到您想要改进您的代码。将输入流读取到StringBuilder并调用jsonNode.toString()确实是不必要的。在大多数情况下,总是有一个有用的API满足您的需要。以下是我的建议:

  1. 使用objectmapper#readtree(InputStream)来简化使用HTTP输入流的部分。
JsonNode jsonNode = objectMapper.readTree(con.getInputStream());
JsonParser jsonParser = new TreeTraversingParser(jsonNode.get("parent").get("child"));
objectMapper.readValue(jsonParser,new TypeReference<List<Car>>(){});
 类似资料:
  • 我需要解析“txf”格式的数据文件。这些文件可能包含 1000 多个条目。由于格式像JSON一样定义得很好,我想做一个像JSON这样的通用解析器,它可以序列化和解串化txf文件。 与JSON相反,标记没有办法识别对象或数组。如果一个带有相同标签的条目出现,我们需要把它看作一个数组。 标记对象的开始。 标记对象的成员 标记对象的结尾 下面是一个示例“txf”文件 我能够使用NSScanner创建通用

  • 问题内容: 因此,最近我一直在制作python脚本,用于从大型文本文件(> 1 GB)中提取数据。问题基本上可以归结为从文件中选择文本行,然后从某个数组中搜索字符串以查找字符串(此数组中可以包含多达1000个字符串)。这里的问题是我必须找到该字符串的特定出现,并且该字符串在该文件中可能出现无数次。同样,需要一些解码和编码,这另外会降低脚本速度。代码看起来像这样: 我的问题是:有没有办法对此进行优化

  • 18.6. 优化字符串操作 Soundex 算法的最后一步是对短结果补零和截短长结果。最佳的做法是什么? 这是目前在 soundex/stage2/soundex2c.py 中的做法: digits3 = re.sub('9', '', digits2) while len(digits3) < 4: digits3 += "0" return digit

  • 问题内容: 希望这只是一个简单的问题,涉及到Sql 2008中的查询时的性能优化。 我曾为在其ETL流程以及一些网站中经常使用Stored Procs的公司工作。我已经看到了他们需要基于一组有限的键值来检索特定记录的情况。我已经看到它以3种不同的方式进行处理,下面的伪代码对此进行了说明。 动态SQL,它包含一个字符串并执行它。 使用用户定义的函数将定界字符串拆分为表 使用XML作为参数而不是带分隔

  • 这是我的代码: 如何根据爱好对学生进行分组。我尝试了以下代码: 它没有给出正确的答案。

  • 我们知道,在JDK8及以下版本中,使用加号表示连接的字符串将被编译到StringBuilder中进行性能优化,但在JDK9之后,它将使用<code>java.lang.invoke实现。StringConcatFactory#makeConcatWithConstants方法。 但是,在反编译< code>java.lang.Object之后,可以看到其< code>toString方法仍然是使用