Конвертировать структуру JSON - PullRequest
2 голосов
/ 25 марта 2010

У меня есть набор данных в одной структуре JSON:

[[task1, 10, 99],  
[task2, 10, 99],  
[task3, 10, 99],  
[task1, 11, 99],  
[task2, 11, 99],  
[task3, 11, 99]] 

и нужно преобразовать его в другую структуру JSON:

[{  
  label: "task1",  
  data: [[10, 99], [11, 99]]  
},  
{   
  label: "task2",  
  data: [[10, 99], [11, 99]] 
},  
{  
  label: "task3",  
  data: [[10, 99], [11, 99]]
}]

Какой лучший способ сделать это с помощью javascript / java?

Ответы [ 3 ]

3 голосов
/ 25 марта 2010

Для Java вы можете использовать json-simple с JSON.org. Я не думаю, что есть «умный» способ сделать это, как уже говорили другие, вам просто нужно конвертировать JSON в реальные объекты, манипулировать и конвертировать обратно. (см. ниже) Также я считаю, что вы должны заключать в кавычки буквенные строки, например. «task1», «label», «data» для того, чтобы он был действительным JSON (или, по крайней мере, json-simple не примет его, если вы этого не сделаете)

    package com.another;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class NewClass {

    public static final String inputString = "[ [\"task1\", 10, 99],   [\"task2\", 10, 99],   [\"task3\", 10, 99],   [\"task1\", 11, 99],   [\"task2\", 11, 99],   [\"task3\", 11, 99]]";

    public static void main(String[] args) throws ParseException {
        JSONArray obj = (JSONArray) new JSONParser().parse(inputString);
        Map<Object, JSONObject> output = new HashMap<Object, JSONObject>();
        for (Object o : obj) {
            JSONArray item = (JSONArray) o;
            Object title = item.get(0);
            Object first = item.get(1);
            Object second = item.get(2);
            JSONObject dest = output.get(title);
            if (dest == null) {
                dest = new JSONObject();
                output.put(title, dest);
                dest.put("label", title);
                dest.put("data", new JSONArray());
            }
            JSONArray data = new JSONArray();
            data.add(first);
            data.add(second);
            ((JSONArray) dest.get("data")).add(data);
        }
        String outputString = JSONArray.toJSONString(Arrays.asList(output.values().toArray()));
        System.out.println(outputString);
    }
}

Вот оно в JS

var inputString = "[ [\"task1\", 10, 99],   [\"task2\", 10, 99],   [\"task3\", 10, 99],   [\"task1\", 11, 99],   [\"task2\", 11, 99],   [\"task3\", 11, 99]]";

var obj = JSON.parse(inputString);
var output = new Object();
for (var i in obj) {
    var item = obj[i];
    var title = item[0];
    var first = item[1];
    var second = item[2];
    var dest = output[title];
    if (dest == null) {
        dest = {
            "label" : title,
            "data": new Array()
            };
        output[title] = dest;
    }
    dest.data.push([first, second]);
}
var outputArray = new Array();
for (var t in output) {
    outputArray.push(output[t]);
}
2 голосов
/ 25 марта 2010

Сначала вам нужно проанализировать JSON, чтобы получить реальные объекты.

С помощью JavaScript вы можете просто eval() его или использовать JSON.parse(). Существует реализация JSON на JSON.org для браузеров, в которых этого нет.

Для Java (совершенно другой язык) JSON.org также имеет реализацию анализатора JSON, которую вы можете использовать.

После того, как вы извлечете из него объекты, вы можете просто переупорядочить их до тех пор, пока не наполнитесь душой, затем JSON.stringify() (в JS) преобразовать обратно в JSON.

1 голос
/ 24 ноября 2016

Попробуйте Толчок .Это библиотека Java, которая позволяет вам указывать преобразование в json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...