2

我有一个服务使用者,他希望我的服务生成以行分隔的 JSONL。如何修改 Jackson 解析器或提供自定义序列化程序,以便将重新调整的对象数组序列化为 JSONL 而不是 JSON。

例如下面的代码

import java.util.Arrays;

import org.apache.commons.lang3.tuple.Pair;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class JsonlServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(JsonlServiceApplication.class, args);
    }


    @GetMapping("jsonl")
    private ResponseEntity<?> getJsonl(){
        Pair<String, String> p1 = Pair.of("foo", "baa");
        Pair<String, Integer> p2 = Pair.of("key", 10);

        return new ResponseEntity(Arrays.asList(p1, p2), HttpStatus.OK);
    }
}

将产生这个 JSON:

[
  {
    "foo": "baa"
  },
  {
    "key": 10
  }
]

但消费者希望:

{"foo": "baa"}
{"key": 10}
4

1 回答 1

0

也许您可以将 json 解析为 Object[] 并在每个 elem 上进行迭代?像那样 :

public static void main(String[] args) {
        String json = "[{\"foo\":\"baa\"},{\"key\":10}]";
        Gson gson = new Gson();
        Object yourObj[] = gson.fromJson(json, Object[].class);
        Arrays.stream(yourObj).forEach(e -> {
            System.out.println(e);
        });
    }
于 2017-11-17T14:55:35.767 回答