是否存在一些可以生成JSON对象的库,其中集合表示为一组编号项目?
例如使用GSON库并具有这样的类时:
from neomodel import db, StructuredNode, StringProperty
from neomodel import config
config.DATABASE_URL = 'bolt://neo4j:neo4j@localhost:7687'
# Using `*args`: The first parameter to the constructor defines the `test`
class Item(StructuredNode):
uid = StringProperty(unique_index=True)
name = StringProperty(unique_index=True)
def __init__(self, *args, **kwargs):
if args:
test = args[0]
kwargs['uid'] = 'g.' + str(test)
kwargs['name'] = test
super(Item, self).__init__(**kwargs)
else:
print('no test')
item = Item('test_test_test')
item.save()
# or using `**kwargs`: a entry `test` in kwargs defines the `test` for uid and name
class Kitem(StructuredNode):
uid = StringProperty(unique_index=True)
name = StringProperty(unique_index=True)
def __init__(self, *args, **kwargs):
if kwargs and 'test' in kwargs:
test = kwargs['test']
kwargs.pop('test',None)
kwargs['uid'] = 'g.' + str(test)
kwargs['name'] = test
super(Kitem, self).__init__(**kwargs)
else:
print('no test')
kitem = Kitem(test='test_test_test_k')
kitem.save()
GSON这样生成JSON:
`class Bus {
List<Pasenger> passengers;
public Bus(List<Pasenger> passengers) {
this.passengers = passengers;
}
}`
但是我被要求生成一个JSON,其中用每个具有索引的项目表示集合。 像这样:
`{"bus":{
"passengers":[
{"name":"John","familiName":"Smith"},
{"name":"Marry","familiName":"James"}
]
}}`
我研究了GSON和FasterXML,但找不到对此功能的支持。 有人知道有图书馆支持吗?
任何帮助表示赞赏。
答案 0 :(得分:1)
您可以创建一个实现JsonSerializer的类,以指定序列化的方式。
然后在构建您的Gson时注册它:
Gson gson = new GsonBuilder()。registerTypeAdapter(Bus.class,new BusAdapter())。create();
更多信息:https://github.com/google/gson/blob/master/UserGuide.md#TOC-Writing-a-Serializer
答案 1 :(得分:1)
我认为您可以创建Map而不是List(如果您不想编写自定义序列化程序和反序列化程序)。而Bus的构造函数将像这样:
private Map<String, Pasenger> bus = new HashMap<>();
public Bus(List<Pasenger> passengers) {
for (int i = 0; i < passengers.size(); i++){
bus.put("passengers["+i+"]", passengers.get(i));
}
}
对于简单的Pasenger,仅使用名称
{"bus":
{
"passengers[0]":{"name":"first"},
"passengers[1]":{"name":"second"}
}
}