我有这样的对象结构:
class A {
List<B> bees;
}
class B {
String с;
}
我正在使用Gson解析器将此对象序列化为此字符串:
{"a":{"bees":[{"с":"text"}]}}
(添加根元素“a”)
API的格式有点不同:
{"a":{"bees":[{"b":{"с":"text"}}]}}
我需要能够正确地将这些字符串解析为A对象。
默认情况下,B对象(作为A的一部分)变为非空,但为空(所有字段均为空),这是可以理解的,因为解析器在其中找不到任何字段“b”(当它实际上是一个类时)名称)。
我正在寻找一个通用的解决方案,我有很多这样复杂的对象,我不想为每个对象实现很多自定义反序列化器。
Gson不是强制性的,如果有必要,我可以使用另一个lib。
感谢。
答案 0 :(得分:1)
我更喜欢Jackson Tree Model和JDK 8 Stream来解析这样的json字符串,核心思想是将# Multi-threaded Mandelbrot Fractal (Do not run using IDLE!)
# FB - 201104306
import threading
from PIL import Image
w = 512 # image width
h = 512 # image height
image = Image.new("RGB", (w, h))
wh = w * h
maxIt = 256 # max number of iterations allowed
# drawing region (xa < xb & ya < yb)
xa = -2.0
xb = 1.0
ya = -1.5
yb = 1.5
xd = xb - xa
yd = yb - ya
numThr = 5 # number of threads to run
# lock = threading.Lock()
class ManFrThread(threading.Thread):
def __init__ (self, k):
self.k = k
threading.Thread.__init__(self)
def run(self):
# each thread only calculates its own share of pixels
for i in range(k, wh, numThr):
kx = i % w
ky = int(i / w)
a = xa + xd * kx / (w - 1.0)
b = ya + yd * ky / (h - 1.0)
x = a
y = b
for kc in range(maxIt):
x0 = x * x - y * y + a
y = 2.0 * x * y + b
x = x0
if x * x + y * y > 4:
# various color palettes can be created here
red = (kc % 8) * 32
green = (16 - kc % 16) * 16
blue = (kc % 16) * 16
# lock.acquire()
global image
image.putpixel((kx, ky), (red, green, blue))
# lock.release()
break
if __name__ == "__main__":
tArr = []
for k in range(numThr): # create all threads
tArr.append(ManFrThread(k))
for k in range(numThr): # start all threads
tArr[k].start()
for k in range(numThr): # wait until all threads finished
tArr[k].join()
image.save("MandelbrotFractal.png", "PNG")
数组元素bees
映射到{"b":{"с":"text"}}
的函数{{1} API。
{"с":"text"}
答案 1 :(得分:0)
如果您可以更改类结构,则更改类结构以匹配API的格式。例如,
class A {
List<B> bees;
}
class B {
MyTypeObjB B;
}
class MyTypeObjB {
String c;
}
编辑根据评论,您还可以尝试通过在自定义类上实施deserialize
界面来自定义JsonDeserializer
方法。
您可以找到有关如何执行的详细信息,