我想向jsonObject添加一个新字段,这个新字段的名称将基于另一个字段的值。明确地说,这是我想要实现的一个例子。
{
"values": [
{
"id": "1",
"properties": [
{
"stat": "memory",
"data": 8
},
{
"stat": "cpu",
"data": 4
}
]
},
{
"id": "2",
"properties": [
{
"stat": "status",
"data": "OK"
},
{
"stat": "cpu",
"data": 4
}
]
}
]
}
我想为每个json对象添加一个新的字段,它将以字段“stat”的值作为名称。
{
"values": [
{
"id": "1",
"properties": [
{
"stat": "memory",
"data": 8,
"memory": 8
},
{
"stat": "cpu",
"data": 4,
"cpu": 4
}
]
},
{
"id": "2",
"properties": [
{
"stat": "status",
"data": 0,
"status": 0
},
{
"stat": "cpu",
"data": 4,
"cpu": 4
}
]
}
]
}
我尝试使用JsonPath库执行以下操作,但对我来说,这是一个难看的解决方案,因为我将解析json三次,并进行一些手动替换。
val configuration = Configuration.builder().options(Option.DEFAULT_PATH_LEAF_TO_NULL, Option.ALWAYS_RETURN_LIST).build()
val jsonContext5 = JsonPath.using(configuration).parse(jsonStr)
val listData = jsonContext.read("$['values'][*]['properties'][*]['data']").toString
.replace("[", "").replace("]", "").split(",").toList
val listStat = jsonContext.read("$['values'][*]['properties'][*]['stat']").toString
.replace("[", "").replace("]", "")
.replace("\"", "").split(",").toList
// Replacing values of "stat" by values of "data"
jsonContext5.map("$['values'][*]['properties'][*]['stat']", new MapFunction() {
var count = - 1
override def map(currentValue: Any, configuration: Configuration): AnyRef = {
count += 1
listData(count)
}
})
// replace field stat by its value
for( count <- 0 to listStat.size - 1){
val path = s"['values'][*]['properties'][$count]"
jsonContext5.renameKey(path, "stat", s"${listStat(count)}")
}
这是得到的结果
{
"values": [
{
"id": "1",
"properties": [
{
"data": 8,
"memory": "8"
},
{
"data": 4,
"cpu": "4"
}
]
},
{
"id": "2",
"properties": [
{
"data": 0,
"memory": "0"
},
{
"data": 4,
"cpu": "4"
}
]
}
]
}
有没有更好的方法来达到这个结果呢?我试着用gson来做,但它不能很好地处理路径。
这是使用Gson的一种方法,但由于我正在创建另一个JSON,因此将丢失有关其他列的信息。
val jsonArray = jsonObject.get("properties").getAsJsonArray
val iter = jsonArray.iterator()
val agreedJson = new JsonArray()
while(iter.hasNext) {
val json = iter.next().getAsJsonObject
agreedJson.add(replaceCols(json))
}
def replaceCols(json: JsonObject) = {
val fieldName = "stat"
if(json.has(fieldName)) {
val columnName = json.get(fieldName).getAsString
val value: String = if (json.has("data")) json.get("data").getAsString else ""
json.addProperty(columnName, value)
}
json
}
像这样的怎么样?
private static void statDup(final JSONObject o) {
if (o.containsKey("properties")) {
final JSONArray a = (JSONArray) o.get("properties");
for (final Object e : a) {
final JSONObject p = (JSONObject) e;
p.put(p.get("stat"), p.get("data"));
}
} else {
for (final Object key : o.keySet()) {
final Object value = o.get(key);
if (value instanceof JSONArray) {
for (final Object e : (JSONArray) value) {
statDup((JSONObject) e);
}
}
}
}
}
我有一个来自javax的现有jsonobject。json。JsonObject类。 我一辈子都想不出如何修改其中现有的价值观。理想情况下,我想这样做: 根据API,不允许修改该映射。 http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html 此映射对象提供对JSON对象数据的只读访问,并尝试修改映射,无论是直接修改还是通过其集合
我有一个json blob,如下所示: 这只是一个在这里发布的例子。在这个例子中,我们看到它提供了一个学校每年发生的所有事件的列表,该列表是一个累积列表,即上一年的事件也会被追加。我们知道的是,每年的活动都将以“会议开始”活动开始。我想通过这件事,以最新的一系列事件结束。请忽略事件名称中的时间戳或年份,它们只是示例,我在现实世界中没有此类信息。我需要的最终结果是: 所以,我想保留从“会话开始”事件
问题内容: 标题说明了一切。我在 SWIFT_MODULE_NAME 的构建设置中进行了 搜索 ,但没有发现任何问题。我也在网上搜索过,并且有对该名称的引用,但没有有关其定义的信息。 此外,我在Apple Docs中找不到任何提及SWIFT_MODULE_NAME的信息。 我确实知道这一点:它在“ Objective-C生成的接口头名称”构建设置中使用,并且可以通过双击设置值来查看: $(SWIF
在我的Nativescript Angular 2 Typescript应用程序中,我希望有一个Nativescript加载任何包含html文本输入字段的远程网站(不受我控制)。 然后我想用我的NativeScript应用程序的值填充这些输入字段。 我以前在android studio中使用java完成过这项工作,在那里可以运行一些JS并修改webview的dom。但是,在没有运行特定于andro
问题内容: 我试图对Java Html Document进行一些改进,但是我遇到了与之相关的问题。一件事是,如果用户代理是Java VM,则某些服务器会阻止请求。另一个问题是不会设置或标头字段。由于多个站点使用这些字段来验证是否从其自己的站点访问了内容,因此在此也将我屏蔽了。据我所知,唯一的解决方案是替换HTTP协议的URL处理程序。还是有任何方法可以修改默认的HTTP处理程序? 问题答案: 打开
如果设置Headers只会添加新的UA,原来的UA('dart:io')不会被删除 部分NetworkImage源码(headers只会被添加但原来的不会被删除):