diff --git a/GsonFormat1.2.0.jar b/GsonFormat1.2.0.jar new file mode 100644 index 0000000..b8ded18 Binary files /dev/null and b/GsonFormat1.2.0.jar differ diff --git a/GsonFormat1.2.jar b/GsonFormat1.2.jar deleted file mode 100644 index c135da8..0000000 Binary files a/GsonFormat1.2.jar and /dev/null differ diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index f05ca7c..17bcc17 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -2,6 +2,10 @@ GsonFormat quickly to convert a JSON string to an InnerClassEntity class ..
+
+ ● Support Data Conversion Library(eg:Gson,Jack,FastJson)
+ ● Added Virgo mode.
+ ● Support Field name Custom.
openSource ]]> diff --git a/Screenshot/1.2.0.gif b/Screenshot/1.2.0.gif new file mode 100644 index 0000000..319659b Binary files /dev/null and b/Screenshot/1.2.0.gif differ diff --git a/src/ConvertBridge.java b/src/ConvertBridge.java index c714d6a..0be5846 100644 --- a/src/ConvertBridge.java +++ b/src/ConvertBridge.java @@ -98,6 +98,8 @@ public void run() { json = new JSONObject(jsonStr); } catch (Exception e) { String jsonTS = filterAnnotation(jsonStr); + + jsonTS=jsonTS.replaceAll("^[\\s\\S]*?\\{","{"); try { json = new JSONObject(jsonTS); } catch (Exception e2) { @@ -140,6 +142,15 @@ public void run() { mFilterClass = null; } + + public static void main(String[] args) { + + String s=""; + s=s.replaceAll("^[\\s\\S]*?\\{","{"); + + System.out.print(s); + } + private void initFilterClass() { @@ -152,6 +163,7 @@ private void initFilterClass() { InnerClassEntity innerClassEntity1 = new InnerClassEntity(); innerClassEntity1.setClassName(psiClass.getName()); + innerClassEntity1.setAutoCreateClassName(psiClass.getName()); innerClassEntity1.setFields(initFilterField(psiClass)); innerClassEntity1.setPsiClass(psiClass); recursionInnerClass(innerClassEntity1); @@ -168,6 +180,7 @@ private void recursionInnerClass(InnerClassEntity innerClassEntity) { for (PsiClass psiClass : innerClasss) { InnerClassEntity innerClassEntity1 = new InnerClassEntity(); innerClassEntity1.setClassName(psiClass.getName()); + innerClassEntity1.setAutoCreateClassName(psiClass.getName()); innerClassEntity1.setFields(initFilterField(psiClass)); innerClassEntity1.setPsiClass(psiClass); recursionInnerClass(innerClassEntity1); @@ -280,6 +293,7 @@ public void parseJson(JSONObject json) { if(Config.getInstant().isVirgoMode()){ mGenerateEntity.setClassName(""); + mGenerateEntity.setAutoCreateClassName(""); mGenerateEntity.setPsiClass(mGeneratClass); mGenerateEntity.setFields(createFields(json, fieldList, mGenerateEntity)); FieldsDialog fieldsDialog=new FieldsDialog(mJsonUtilsDialog,mGenerateEntity,mFactory, @@ -399,12 +413,10 @@ private FieldEntity createFiled(InnerClassEntity parentClass,String key, Object - FieldEntity fieldEntity = typeByValue(parentClass, filedName, type); + FieldEntity fieldEntity = typeByValue(parentClass, key, type); fieldEntity.setFieldName(filedName); - fieldEntity.setKey(key); - if(type!=null && !(fieldEntity instanceof InnerClassEntity)) { - fieldEntity.setValue(type.toString()); - } + fieldEntity.setAutoCreateFiledName(filedName); + return fieldEntity; @@ -422,7 +434,7 @@ private FieldEntity typeByValue(InnerClassEntity parentClass, String key, Object InnerClassEntity classEntity = checkInnerClass((JSONObject) type); if (classEntity == null) { - typeStr = createClassSubName( key, type, parentClass) ; + typeStr = createSubClassName(key, type, parentClass) ; InnerClassEntity innerClassEntity= createJSonObjectClassSub(typeStr, (JSONObject) type, parentClass); innerClassEntity.setKey(key); innerClassEntity.setType("%s"); @@ -465,8 +477,14 @@ private FieldEntity typeByValue(InnerClassEntity parentClass, String key, Object fieldEntity.setType(typeStr); noteBean=fieldEntity; + if(type!=null && !(noteBean instanceof InnerClassEntity)) { + noteBean.setValue(type.toString()); + } } + + noteBean.setKey(key); + return noteBean; } @@ -485,7 +503,9 @@ private InnerClassEntity checkInnerClass(JSONObject jsonObject) { had=true; break; } - + } + if(!had){ + break; } } @@ -500,12 +520,13 @@ private InnerClassEntity checkInnerClass(JSONObject jsonObject) { private InnerClassEntity createJSonObjectClassSub(String className, JSONObject json, InnerClassEntity parentClass) { InnerClassEntity subClassEntity=new InnerClassEntity(); - subClassEntity.setClassName(className); + Set set = json.keySet(); List list = new ArrayList(set); List fields = createFields(json, list, subClassEntity); subClassEntity.setFields(fields); subClassEntity.setClassName(className); + subClassEntity.setAutoCreateClassName(className); if (Config.getInstant().isReuseEntity()) { mFilterClass.add(subClassEntity); } @@ -514,7 +535,7 @@ private InnerClassEntity createJSonObjectClassSub(String className, JSONObject j } - private String createClassSubName( String key, Object o, InnerClassEntity parentClass) { + private String createSubClassName(String key, Object o, InnerClassEntity parentClass) { String name = ""; if(o instanceof JSONObject){ @@ -555,7 +576,8 @@ private FieldEntity listTypeByValue(InnerClassEntity parentClass, String key, Ob InnerClassEntity innerClassEntity= createJSonObjectClassSub(typeStr, (JSONObject) type, parentClass); innerClassEntity.setType(typeStr); innerClassEntity.setKey(key); - innerClassEntity.setClassName(createClassSubName(key, type, parentClass)); + innerClassEntity.setClassName(createSubClassName(key, type, parentClass)); + innerClassEntity.setAutoCreateClassName(innerClassEntity.getClassName()); noteBean=innerClassEntity; } else { @@ -614,6 +636,12 @@ public String captureStringLeaveUnderscore(String str) { if (TextUtils.isEmpty(str)) { return str; } + String temp = str.replaceAll("^_+", ""); + + if( !TextUtils.isEmpty(temp)){ + str=temp; + } + String[] strings = str.split("_"); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(strings[0]); diff --git a/src/SettingDialog.form b/src/SettingDialog.form index 649fb48..2ec9d74 100644 --- a/src/SettingDialog.form +++ b/src/SettingDialog.form @@ -67,7 +67,7 @@ - + @@ -315,7 +315,7 @@ - + diff --git a/src/SettingDialog.java b/src/SettingDialog.java index 53588b4..a490c7b 100644 --- a/src/SettingDialog.java +++ b/src/SettingDialog.java @@ -144,11 +144,11 @@ public void actionPerformed(ActionEvent actionEvent) { String filedPrefix=null; filedPrefix=Config.getInstant().getFiledNamePreFixStr(); -// if(TextUtils.isEmpty(filedPrefix)){ + if(TextUtils.isEmpty(filedPrefix)){ JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project); filedPrefix=styleManager.getPrefixByVariableKind(VariableKind.FIELD ); -// } + } filedPrefixTF.setText(filedPrefix); diff --git a/src/config/Config.java b/src/config/Config.java index 376c409..ec92662 100644 --- a/src/config/Config.java +++ b/src/config/Config.java @@ -33,7 +33,7 @@ public class Config { /** - * 处女座模? + * 处女座模�? */ private boolean virgoMode=true; @@ -43,7 +43,7 @@ public class Config { private String entityPackName; /** - * 错误次数,前两次提醒哪里查看错误日?. + * 错误次数,前两次提醒哪里查看错误日�?. */ private int errorCount; @@ -295,7 +295,7 @@ public void saveArrayFromData1Str(String arrayFromData1Str) { public boolean isToastError() { - if( Config.getInstant().getErrorCount()>3){ + if( Config.getInstant().getErrorCount()<3){ Config.getInstant().setErrorCount(Config.getInstant().getErrorCount() + 1); Config.getInstant().save(); return true; diff --git a/src/config/Strings.java b/src/config/Strings.java index 0fefcde..2da2fe2 100644 --- a/src/config/Strings.java +++ b/src/config/Strings.java @@ -72,8 +72,8 @@ public class Strings { public static final String gsonAnnotation="@com.google.gson.annotations.SerializedName\\s*\\(\\s*\"{filed}\"\\s*\\)"; public static final String gsonFullNameAnnotation="@com.google.gson.annotations.SerializedName(\"{filed}\")"; - public static final String fastFullNameAnnotation="@com.alibaba.fastjson.annotation.JSONField(\"{filed}\")"; - public static final String fastAnnotation="@com.alibaba.fastjson.annotation.JSONField\\s*\\(\\s*\"{filed}\"\\s*\\)"; - public static final String jackAnnotation="@com.fasterxml.jackson.annotation.JsonProperty\\s*\\(\\s*name\\s*=\\s*\"{filed}\"\\s*\\)"; - public static final String jackFullNameAnnotation="@com.fasterxml.jackson.annotation.JsonProperty(name=\"{filed}\")"; + public static final String fastFullNameAnnotation="@com.alibaba.fastjson.annotation.JSONField(name=\"{filed}\")"; + public static final String fastAnnotation="@com.alibaba.fastjson.annotation.JSONField\\s*\\(\\s*name\\s*=\\s*\"{filed}\"\\s*\\)"; + public static final String jackAnnotation="@com.fasterxml.jackson.annotation.JsonProperty\\s*\\(\\s*\"{filed}\"\\s*\\)"; + public static final String jackFullNameAnnotation="@com.fasterxml.jackson.annotation.JsonProperty(\"{filed}\")"; } diff --git a/src/entity/FieldEntity.java b/src/entity/FieldEntity.java index 8d9ba87..646fb95 100644 --- a/src/entity/FieldEntity.java +++ b/src/entity/FieldEntity.java @@ -20,6 +20,16 @@ public class FieldEntity { private String value; private String extra; + private String autoCreateFiledName; + + public String getAutoCreateFiledName() { + return autoCreateFiledName; + } + + public void setAutoCreateFiledName(String autoCreateFiledName) { + this.autoCreateFiledName = autoCreateFiledName; + } + private InnerClassEntity targetClass; @@ -47,6 +57,9 @@ public String getFieldName() { } public void setFieldName(String fieldName) { + if(TextUtils.isEmpty(fieldName)){ + return; + } this.fieldName = fieldName; } @@ -90,16 +103,22 @@ public void checkAndSetType(String s) { - if(targetClass == null){ - - }else{ - String regex = getType().replaceAll("%s", "(\\w+)").replaceAll(".", "\\."); - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(s); - if (matcher.find()&&matcher.groupCount()>0) { - targetClass.setClassName(matcher.group(1)); - } - } +// if(targetClass == null){ +// +// }else{ +// String regex = getType().replaceAll("%s", "(\\w+)").replaceAll(".", "\\."); +// Pattern pattern = Pattern.compile(regex); +// Matcher matcher = pattern.matcher(s); +// if (matcher.find()&&matcher.groupCount()>0) { +// +// String temp=matcher.group(1); +// if(TextUtils.isEmpty(temp)){ +// targetClass.setClassName(targetClass.getAutoCreateClassName()); +// }else{ +// targetClass.setClassName(temp); +// } +// } +// } } public String getKey() { diff --git a/src/entity/InnerClassEntity.java b/src/entity/InnerClassEntity.java index 2262291..d0f807d 100644 --- a/src/entity/InnerClassEntity.java +++ b/src/entity/InnerClassEntity.java @@ -21,6 +21,16 @@ public class InnerClassEntity extends FieldEntity { private String className; private List fields; + private String autoCreateClassName; + + public String getAutoCreateClassName() { + return autoCreateClassName; + } + + public void setAutoCreateClassName(String autoCreateClassName) { + this.autoCreateClassName = autoCreateClassName; + } + public void setFields(List fields) { this.fields = fields; } @@ -28,7 +38,7 @@ public void setFields(List fields) { private PsiClass psiClass; - public String getRealType(){ + public String getRealType() { return String.format(super.getType(), className); } @@ -37,8 +47,15 @@ public void checkAndSetType(String s) { String regex = getType().replaceAll("%s", "(\\\\w+)").replaceAll("\\.", "\\\\."); Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(s); - if (matcher.find()&&matcher.groupCount()>0) { - setClassName(matcher.group(1)); + if (matcher.find() && matcher.groupCount() > 0) { + + String temp=matcher.group(1); + if(TextUtils.isEmpty(temp)){ + setClassName(getAutoCreateClassName()); + }else{ + setClassName(matcher.group(1)); + } + } } @@ -75,22 +92,26 @@ public void setPsiClass(PsiClass psiClass) { public String getFiledPackName() { - String fullClassName; if (!TextUtils.isEmpty(getPackName())) { - fullClassName= getPackName() + "." + getClassName(); + fullClassName = getPackName() + "." + getClassName(); } else { - fullClassName= getClassName(); + fullClassName = getClassName(); } - return String.format(getType(), fullClassName); + return String.format(getType(), fullClassName); } public void generateFiled(PsiElementFactory mFactory, PsiClass mClass) { - if (Config.getInstant().getAnnotationStr().equals(Strings.fastAnnotation)) { - mClass.addBefore(mFactory.createAnnotationFromText("@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true)", mClass), mClass); + + try { + if (Config.getInstant().getAnnotationStr().equals(Strings.fastAnnotation)) { + mClass.addBefore(mFactory.createAnnotationFromText("@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true)", mClass), mClass); + } + } catch (Throwable e) { + } @@ -120,6 +141,11 @@ public void generateFiled(PsiElementFactory mFactory, PsiClass mClass) { } } + if (Config.getInstant().isFieldPrivateMode()) { + createSetMethod(mFactory, getFields(), mClass); + createGetMethod(mFactory, getFields(), mClass); + } + } public void generateClass(PsiElementFactory mFactory, PsiClass parentClass) { @@ -211,8 +237,17 @@ private void createSetMethod(PsiElementFactory mFactory, List0) { + if (matcher.find() && matcher.groupCount() > 0) { System.out.print(matcher.group(1)); System.out.print(matcher.groupCount()); diff --git a/src/org/json/JSONObject.java b/src/org/json/JSONObject.java index 166aad0..c94664b 100644 --- a/src/org/json/JSONObject.java +++ b/src/org/json/JSONObject.java @@ -145,7 +145,7 @@ public String toString() { * Construct an empty JSONObject. */ public JSONObject() { - this.map = new LinkedHashMap<>(); + this.map = new LinkedHashMap(); } /** diff --git "a/\346\265\213\350\257\225\347\224\250\344\276\213. txt" "b/\346\265\213\350\257\225\347\224\250\344\276\213. txt" index c498d33..d4eecc7 100644 --- "a/\346\265\213\350\257\225\347\224\250\344\276\213. txt" +++ "b/\346\265\213\350\257\225\347\224\250\344\276\213. txt" @@ -31,12 +31,11 @@ } -测试2: 测试List泛型 +测试3: 测试List泛型 { "list": [1,2,3,4] } -测试3: 测试多重嵌套 - +测试4: 测试多重嵌套 { "kind": "youtube#searchListResponse", "etag": "\"k1sYjErg4tK7WaQQxvJkW5fVrfg/usRLzp_l5ss-L8Yb9ScY-VDAEOo\"", @@ -103,15 +102,15 @@ ] } -测试 +测试 5 { - "r":0, + "_r":0, "err":"None", "photo":"http://xxxx.com/photo.jpg" } -测试 +测试 6 { "mesg": "获取商品列表(某类型)", "data": {