我已经在我的Wordpress网站上开发了一个钩子,我可以在其中更新来自其他应用程序的信息。我正在使用一个需要特定JSON数据结构的特定插件。我的Java编程技巧有点生疏,所以我希望有人可以帮助我采取以下列表:
+------+-------+-----+-------+
| Year | Month | Day | Value |
+------+-------+-----+-------+
| 2014 | 12 | 22 | 1 |
| 2014 | 12 | 23 | 1 |
| 2014 | 12 | 24 | 1 |
| 2014 | 12 | 25 | 1 |
| 2014 | 12 | 26 | 1 |
| 2015 | 1 | 5 | 1 |
| 2015 | 1 | 6 | 1 |
| 2015 | 1 | 7 | 1 |
| 2015 | 1 | 8 | 1 |
| 2015 | 1 | 9 | 1 |
| 2015 | 1 | 19 | 1 |
| 2015 | 1 | 20 | 1 |
| 2015 | 1 | 21 | 1 |
| 2015 | 1 | 22 | 1 |
| 2015 | 1 | 23 | 1 |
| 2015 | 2 | 2 | 1 |
| 2015 | 2 | 3 | 1 |
| 2015 | 2 | 4 | 1 |
| 2015 | 2 | 5 | 1 |
| 2015 | 2 | 6 | 1 |
+------+-------+-----+-------+
并将其转换为以下JSON结构:
{
"2014": {
"12": {
"22": "1",
"23": "1",
"24": "1",
"25": "1",
"26": "1"
}
},
"2015": {
"1": {
"5": "1",
"6": "1",
"7": "1",
"8": "1",
"9": "1",
"19": "1",
"20": "1",
"21": "1",
"22": "1",
"23": "1"
},
"2": {
"2": "1",
"3": "1",
"4": "1",
"5": "1",
"6": "1"
}
}
}
非常感谢任何帮助。
修改
我已经创建了以下嵌套的地图,但我需要正确的结构来返回指定格式的数据
Map<String, Map<String, Map<String, String>>> map = new HashMap<>();
map.put("2014", new HashMap(){{put("12",new HashMap(){{put("22","1");}});}});
map.put("2014", new HashMap(){{put("12",new HashMap(){{put("23","1");}});}});
map.put("2014", new HashMap(){{put("12",new HashMap(){{put("24","1");}});}});
map.put("2014", new HashMap(){{put("12",new HashMap(){{put("25","1");}});}});
map.put("2014", new HashMap(){{put("12",new HashMap(){{put("26","1");}});}});
JSONObject json = new JSONObject(map);
System.out.print(json.toString());
答案 0 :(得分:0)
这取决于您实际意味着用作输入的内容。你的&#34;列表&#34;正如你所提供的,它实际上是一个文本表。如果要从每一行中提取实际数字,可以使用这样的JS正则表达式:
row = s.match(/\d+/g)
其中s
是文本输入的一行。如果它是包含您实际数据的行,row
将有length === 4
,您可以将这些数据传递给这样的函数,以将其添加到您的数据中:
var data = {};
function addDay(y, m, d, v) {
if (!data.hasOwnProperty(y)) {
data[y] = {};
}
if (!data[y].hasOwnProperty(m)) {
data[y][m] = {};
}
data[y][m][d] = v;
}
通过为表格的每一行重复调用row(a[0], a[1], a[2], a[3])
,您应该按照自己的方式构建对象data
。
我希望有更优雅的方法来做到这一点(例如,避免将数据作为全局变量),但这应该有效。
答案 1 :(得分:0)
使用这些依赖项
jackson-databind
jackson-annotations
jackson-core
public class JsonTest {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
Map<String,String> dt=new Hashtable();
dt.put("1", "welcome");
dt.put("2", "bye");
String jsonString = mapper.writeValueAsString(dt)
System.out.println(jsonString);
}
}
这就是你想要的。
答案 2 :(得分:0)
使用以下内容:
HashMap<String, HashMap<String, HashMap<String, String>>> map = new HashMap<String, HashMap<String, HashMap<String, String>>>();
for (int i = 0; i < calendarData.size(); i++) {
if (!map.containsKey(calendarData.get(i).getYear())) {
map.put(calendarData.get(i).getYear(), new HashMap<String, HashMap<String, String>>());
}
if (!map.get(calendarData.get(i).getYear()).containsKey(calendarData.get(i).getMonth())) {
map.get(calendarData.get(i).getYear()).put(calendarData.get(i).getMonth(), new HashMap<String, String>());
}
map.get(calendarData.get(i).getYear()).get(calendarData.get(i).getMonth()).put(calendarData.get(i).getDay(), calendarData.get(i).getValue());
}