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

将非JSON字符串转换为JSON的最佳方法?

胡国兴
2023-03-14

我试图想出一个好的解决方案来将字符串转换为json格式,但我不知道它是否足够好。

String str=“[(姓名:”What We“Need”In Life“作者:”David D.“Filesize:2.17)(姓名:”The House Of Owls“作者:”Carlos“)(姓名:”一个可怜的智者“作者:”Steve Bark“Filesize:1.31)]”;

我想我可能会使用str.replace from(to{,并在}{之间插入逗号,但我如何找到要插入的索引?“”代表Name、Author、fileSize呢?在转换为可读的json字符串之后,我可以序列化为json(由GSON/Jackson)。

共有1个答案

唐高朗
2023-03-14

如果您收到的字符串没有遵循已知的标准(Json、XML...)但它仍然有一个已定义的结构,那么您需要将字符串解析成最适合您的结构。

在您的示例中,字符串似乎具有以下结构:

  • 包装成[...]
  • 的书籍列表
  • 每本书都被包装成(...)
  • 每本书中都有一个名称作者,有时还有一个文件
public class Book {
    private final String name;
    private final String author;
    private final double fileSize;

    public Book(String name, String author, double fileSize) {
        this.name = name;
        this.author = author;
        this.fileSize = fileSize;
    }
}
    //First, extract all the books (text between two parentheses):
    Pattern bookPattern = Pattern.compile("\\(([^()]*)\\)");
    Matcher bookMatcher = bookPattern.matcher(str);
    List<String> rawBooks = new ArrayList<>();
    while (bookMatcher.find()) {
        rawBooks.add(bookMatcher.group(1));
    }

    //Then for each book extracted separate the name (string), author (string) and fileSize (number):
    List<Book> books = new ArrayList<>();
    rawBooks.forEach(rb -> {
        String name = rb.split("Name:")[1].split("Author")[0];
        boolean hasFileSize = rb.contains("FileSize");
        String author;
        double fileSize;
        if (hasFileSize) {
            author = rb.split("Author:")[1].split("FileSize")[0];
            fileSize = Double.parseDouble(rb.split("FileSize:")[1]);
        } else {
            author = rb.split("Author:")[1];
            fileSize = 0;
        }
        books.add(new Book(name, author, fileSize));
    });
 类似资料:
  • 我有一个RestController类,它有一个方法可以根据电影的标题搜索电影: 如果我发送一个json字符串 从邮递员到endpoint,我收到一个空白的回复。 然后我做了一个 就在进入方法后找到字符串filmSearch正是我从邮递员发送的JSON字符串。我的应用程序没有看到JSON和提取值从filmSearch在我的请求附加到应用程序内字符串filmSearch. 如果我移除 在请求映射的一

  • 问题内容: 我有一个我想完全输出为String的。本质上,我想使用由制表符分隔的每个元素按顺序输出。有什么快速的方法可以做到这一点吗?你可以遍历它(或删除每个元素)并将其连接为字符串,但我认为这会非常慢。 问题答案: 基本上,使用循环来迭代是唯一的选择: 不要使用此代码,请继续阅读此答案的底部,以了解为什么不希望使用此代码,以及应该使用哪个代码代替: 实际上,字符串串联就可以了,因为javac编译

  • 问题内容: 我有一个无效的json字符串,如下所示, 我尝试使用JSON.parse将其转换为对象。但是,这不是有效的json字符串。是否有任何函数可以将这种无效格式转换为有效的json字符串或直接转换为对象? 问题答案: 如果您的示例语法与真实JSON相同,则JSONLint表示您需要对名称和值使用双引号。 仅在这种情况下,请使用以下替换调用: 但是,您首先应该尝试使用有效的Json。

  • 问题内容: 我正在使用Java,并且有一个JSON字符串: 然后我的Java地图: 我想将来自JSONObject的所有数据存储在该HashMap中。 谁能为此提供代码?我想使用图书馆。 问题答案: 我几天前通过递归编写了这段代码。

  • 我使用的是Java,我有一个字符串是JSON: 我希望将JSONObject中的所有数据存储在HashMap中。 有人能为此提供代码吗?我想使用库。

  • 问题内容: 我想得到一个表示像这样的json的字符串: {“投票”:{“ option_A”:“ 3”}} 并在其中包含一个“计数”键, 这样结束: {“投票”:{“ option_A”:“ 3”},“ count”:“ 1”} 这就是为什么我计划将其转换为json以便可以添加计数然后再次将其设置为字符串的原因。 问题是我不知道该json的结构 ,所以我无法使用,因为该结构有所不同。我怎样才能做到