comを使用します.alibaba.fastjsonはjsonをcsvに変換し、ヘッダーの順序を指定します./解決する.json変換csv順序が変わった


引用:
fastjsonは現在、jsoncsvに変換することをサポートしていないことを知っています.ネット上の多くはorg.jsonCDL.toStringjson配列をcsvに変換していますが、私には2つの問題があります.
1.ヘッダーで指定された順序が変わります.
私のjson配列:[{"name":"LiMing","age":"28","gender":"man"},{"name":"LiPing","age":"26","gender":"women"}]私がCDL.toStringの結果を使って得たのは:
gender,name,age
women,LiPing,26
man,LiMing,28

名前は前にあります
name,age,gender
LiMing,28,man
LiPing,26,women

これは,CDL.toStringが伝達されたjson配列中のJSONObjectに基づいて処理され,org.jsonJSONObjecta-zの順に並べ替えられると,問題は,org.jsonJSONObjectをどのように秩序化させるかということであり,彼の構造方法ではデフォルトではHashMapであり,それをLinkedHashMapに変更すれば秩序を保つことができることが分かるからである.
    public JSONObject() {
        this.map = new LinkedHashMap();
    }

しかし、ソースコードを変更するのは不便で、自分で梱包して使う必要があります.なぜorg.jsonが自分でorderJSONObjectを出さないのか分かりません.
2.プロジェクトではfastjsonを使い、2つで混乱しやすい
前の手順で説明したようにソースコードを変更しても、同じプロジェクトで2つのjsonパッケージが使用され、特にメンテナンスや参照で間違えやすい.また、fastjsonは、JSONObjectよりも規則的なorg.jsonを指定することをサポートしているが、fastjsoncsvへの変換をサポートしていないので、com.alibaba.fastjson.JSONArraycsvに変換する方法を書くには、主にorg.jsonCDL.javaを参照してください.
解決:
次のコードは、使用例です.
         JSONArray array = new JSONArray();
         
        JSONObject object2 = new JSONObject(new LinkedHashMap<>()); //   LinkedHashMap    
        object2.put("name","LiMing");
        object2.put("age","28");
        object2.put("gender","man");
        
        JSONObject object = new JSONObject(new LinkedHashMap<>());
        object.put("name","LiPing");
        object.put("age","26");
        object.put("gender","women");
        
        array.add(object);
        array.add(object2);

        String s = ConvertCsv.toString(array);
        FileUtils.writeStringToFile(new File("E:\\hello.csv"), s);

ConcertCsv.JAvaツールクラス
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Set;

public class ConvertCsv {
    public ConvertCsv() {
    }
    public static String toString(JSONArray ja) {

        JSONObject jo = ja.getJSONObject(0);
        if (jo != null) {
            Set<String> strings = jo.keySet();
            JSONArray names = JSONArray.parseArray(JSON.toJSONString(strings));
            if (names != null) {
                return rowToString(names) + toString(names, ja);
            }
        }

        return null;
    }
    public static String rowToString(JSONArray jsonArray) {
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < jsonArray.size() ; ++i) {
            if (i > 0) {
                sb.append(',');
            }
            Object object = jsonArray.get(i);
            if (object != null) {
                String string = object.toString();
                if (string.length() > 0 && (string.indexOf(44) >= 0 || string.indexOf(10) >= 0 || string.indexOf(13) >= 0 || string.indexOf(0) >= 0 || string.charAt(0) == '"')) {
                    sb.append('"');
                    int length = string.length();

                    for(int j = 0; j < length; ++j) {
                        char c = string.charAt(j);
                        if (c >= ' ' && c != '"') {
                            sb.append(c);
                        }
                    }

                    sb.append('"');
                } else {
                    sb.append(string);
                }
            }
        }

        sb.append('
'
); return sb.toString(); } public static String toString(JSONArray names, JSONArray ja) { if (names != null && names.size() != 0) { StringBuilder sb = new StringBuilder(); for(int i = 0; i < ja.size(); ++i) { JSONObject jo = ja.getJSONObject(i); if (jo != null) { sb.append(rowToString(toJSONArray(jo, names))); } } return sb.toString(); } else { return null; } } public static JSONArray toJSONArray(JSONObject obj, JSONArray names) { if (names != null && !names.isEmpty()) { JSONArray ja = new JSONArray(); for(int i = 0; i < names.size(); ++i) { ja.add(obj.get(names.getString(i))); } return ja; } else { return null; } }

配列を得る方法はいろいろありますが、ここでは一つ一つ紹介しません.タイプが統一されている場合はclassとして定義してjsonを変換し、順序を指定することができますが、こちらは表頭が不確定です.