Java protobuf是Google開(kāi)發(fā)的序列化框架,它可以將對(duì)象轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),以便于在網(wǎng)絡(luò)上傳輸或存儲(chǔ)。然而,有時(shí)候我們需要將protobuf轉(zhuǎn)換為JSON格式,這時(shí)候就需要使用JSON庫(kù)來(lái)處理。
Google提供了一個(gè)名為protobuf-java-util的類(lèi)庫(kù),它包含了將protobuf對(duì)象轉(zhuǎn)換為JSON格式的工具類(lèi)。這個(gè)類(lèi)庫(kù)可以通過(guò)Maven中心倉(cāng)庫(kù)來(lái)獲?。?/p>
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util</artifactId> <version>3.16.0</version> </dependency>
現(xiàn)在我們有一個(gè)名為Person的protobuf對(duì)象,我們可以使用protobuf-java-util中的JsonFormat類(lèi)將其轉(zhuǎn)換為JSON格式:
Person.Builder builder = Person.newBuilder(); builder.setName("John"); builder.setAge(25); Person person = builder.build(); String json = JsonFormat.printer().print(person); System.out.println(json);
這段代碼首先創(chuàng)建了一個(gè)Person對(duì)象,并設(shè)置了它的name和age屬性。接下來(lái),使用JsonFormat.printer()方法返回一個(gè)JsonFormat.Printer對(duì)象,并調(diào)用其print()方法將Person對(duì)象轉(zhuǎn)換為JSON格式的字符串。最后,將JSON字符串打印出來(lái)。
前面的例子演示了如何將單個(gè)protobuf對(duì)象轉(zhuǎn)換為JSON格式,但是有時(shí)候我們需要將一組protobuf對(duì)象轉(zhuǎn)換為JSON數(shù)組。這時(shí)候我們可以使用Java數(shù)組和for循環(huán)來(lái)實(shí)現(xiàn):
Person[] persons = new Person[]{ builder.setName("John").setAge(25).build(), builder.setName("Mary").setAge(30).build() }; StringBuilder sb = new StringBuilder("["); for (Person person : persons) { String json = JsonFormat.printer().print(person); sb.append(json).append(","); } sb.deleteCharAt(sb.length() - 1); // 刪除最后一個(gè)逗號(hào) sb.append("]"); System.out.println(sb.toString());
這段代碼創(chuàng)建了一個(gè)Person數(shù)組,然后遍歷數(shù)組中的每個(gè)對(duì)象,將其轉(zhuǎn)換為JSON格式的字符串并添加到StringBuilder對(duì)象中。最后再將字符串的開(kāi)頭和結(jié)尾分別添加上“[”和“]”,就得到了符合JSON規(guī)范的數(shù)組格式。