From 1ab1dcdc816fc603558a2b2b9967f95d9869b0c4 Mon Sep 17 00:00:00 2001 From: Jiang Hua Date: Thu, 29 May 2025 18:15:12 -0700 Subject: [PATCH] migrate json-simple to json --- .github/workflows/gradle.yml | 4 ++ build.gradle | 6 +- .../java/com/vmware/i18n/utils/CLDRUtils.java | 12 ++-- .../java/com/vmware/i18n/utils/JSONUtil.java | 60 ++++++++----------- .../vmware/i18n/utils/LocaleDataUtils.java | 6 +- .../java/com/vmware/i18n/utils/MiscUtils.java | 4 +- .../vmware/i18n/utils/SupplementUtils.java | 8 +-- .../utils/timezone/CldrTimeZoneUtils.java | 50 +++++++++------- .../com/vmware/test/i18n/I18nUtilTest.java | 15 +++-- 9 files changed, 84 insertions(+), 81 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 78e1fb0fc..6cbb7f318 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -158,6 +158,10 @@ jobs: ./gradlew build -x test cp build/libs/i18n-patterns-core-0.11.0.jar java-client-sample/lib cp build/libs/i18n-patterns-core-0.11.0.jar jarpath + # temporary fix, will delete after java client is updated + curl https://repo1.maven.org/maven2/org/json/json/20250107/json-20250107.jar -o java-client-sample/lib/json-20250107.jar + cp java-client-sample/lib/json-20250107.jar jarpath + ls java-client-sample/lib jarpath cd java-client-sample sudo chmod +x gradlew ./gradlew build -x test diff --git a/build.gradle b/build.gradle index 87e6e1243..c8685d289 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -//Copyright 2019-2023 VMware, Inc. +//Copyright 2019-2025 VMware, Inc. //SPDX-License-Identifier: EPL-2.0 apply plugin: 'java' apply plugin: "jacoco" @@ -54,9 +54,7 @@ repositories { dependencies { implementation("commons-collections:commons-collections:3.2.2") - implementation("com.googlecode.json-simple:json-simple:1.1.1"){ - exclude group: 'junit' - } + implementation("org.json:json:20250107") implementation("com.fasterxml.jackson.core:jackson-databind:2.16.0") implementation("commons-io:commons-io:2.13.0") diff --git a/src/main/java/com/vmware/i18n/utils/CLDRUtils.java b/src/main/java/com/vmware/i18n/utils/CLDRUtils.java index b3bd5da8a..f711d2695 100644 --- a/src/main/java/com/vmware/i18n/utils/CLDRUtils.java +++ b/src/main/java/com/vmware/i18n/utils/CLDRUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2023 VMware, Inc. + * Copyright 2019-2025 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ package com.vmware.i18n.utils; @@ -31,8 +31,8 @@ import com.vmware.i18n.common.OfficialStatusEnum; import com.vmware.i18n.utils.timezone.CldrTimeZoneUtils; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; +import org.json.JSONArray; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -1007,8 +1007,10 @@ public static void regionDataExtract() { String locale = null; if (!CommonUtil.isEmpty(itemMap.get(Constants.LANGUAGE_POPULATION))) { Map maxPopulationLanguage = new HashMap<>(); - Map map = JSONUtil - .string2SortMap(itemMap.get(Constants.LANGUAGE_POPULATION).toString()); + Map map = null; + // map = JSONUtil.string2SortMap(new ObjectMapper().writeValueAsString(itemMap.get(Constants.LANGUAGE_POPULATION))); + JSONObject jsonObject = new JSONObject((Map) itemMap.get(Constants.LANGUAGE_POPULATION)); + map = JSONUtil.string2SortMap(jsonObject.toString()); for (Map.Entry item : map.entrySet()) { Map data = (Map) item.getValue(); boolean isMaxLanguage = getMaxLanguage(maxPopulationLanguage, data); diff --git a/src/main/java/com/vmware/i18n/utils/JSONUtil.java b/src/main/java/com/vmware/i18n/utils/JSONUtil.java index cbf16cf68..3317ef374 100644 --- a/src/main/java/com/vmware/i18n/utils/JSONUtil.java +++ b/src/main/java/com/vmware/i18n/utils/JSONUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 VMware, Inc. + * Copyright 2019-2025 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ package com.vmware.i18n.utils; @@ -9,13 +9,11 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.HashMap; import java.util.TreeMap; -import org.json.simple.JSONObject; -import org.json.simple.JSONValue; -import org.json.simple.parser.ContainerFactory; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; +import org.json.JSONObject; +import org.json.JSONException; public class JSONUtil { @@ -25,29 +23,18 @@ public class JSONUtil { * @return Map obj */ @SuppressWarnings("unchecked") - public static Map getMapFromJson(String json) { - JSONParser parser = new JSONParser(); - ContainerFactory containerFactory = getContainerFactory(); - Map result = null; - try { - result = (Map) parser.parse(json, containerFactory); - } catch (ParseException e) { - e.printStackTrace(); - } - return result; - } - - private static ContainerFactory getContainerFactory() { - ContainerFactory containerFactory = new ContainerFactory() { - public List creatArrayContainer() { - return new LinkedList(); - } - - public Map createObjectContainer() { - return new LinkedHashMap(); - } - }; - return containerFactory; + public static Map getMapFromJson(String json) throws JSONException { + Map mapping = null; + try { + // mapping = new ObjectMapper().readValue(json, HashMap.class); + JSONObject jsonObject = new JSONObject(json); + mapping = jsonObject.toMap(); + } catch (JSONException e) { + System.out.println("json=" + json); + e.printStackTrace(); + throw e; + } + return mapping; } /** @@ -65,7 +52,12 @@ public static Object select(JSONObject jsonObj, String keyPath) { Object retvalue = null; for (int i = 0; i < patharr.length; i++) { String key = patharr[i]; - retvalue = current.get(key); + try { + retvalue = current.get(key); + } catch (JSONException e) { + retvalue = null; + break; + } if (i < (patharr.length - 1)) { current = (JSONObject) retvalue; } @@ -81,8 +73,8 @@ public static Object select(JSONObject jsonObj, String keyPath) { public static JSONObject string2JSON(String jsonStr) { JSONObject genreJsonObject = null; try { - genreJsonObject = (JSONObject) JSONValue.parseWithException(jsonStr); - } catch (ParseException e) { + genreJsonObject = new JSONObject(jsonStr); + } catch (JSONException e) { e.printStackTrace(); } return genreJsonObject; @@ -100,9 +92,9 @@ public int compare(String o1, String o2) { } }); try { - Map genreJsonObject = (Map) JSONValue.parseWithException(jsonStr); + Map genreJsonObject = (Map) getMapFromJson(jsonStr); sortMap.putAll(genreJsonObject); - } catch (ParseException e) { + } catch (JSONException e) { e.printStackTrace(); } return sortMap; diff --git a/src/main/java/com/vmware/i18n/utils/LocaleDataUtils.java b/src/main/java/com/vmware/i18n/utils/LocaleDataUtils.java index b6003d1a5..c3f130d09 100644 --- a/src/main/java/com/vmware/i18n/utils/LocaleDataUtils.java +++ b/src/main/java/com/vmware/i18n/utils/LocaleDataUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 VMware, Inc. + * Copyright 2019-2025 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ package com.vmware.i18n.utils; @@ -7,8 +7,8 @@ import java.io.File; import java.util.*; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; +import org.json.JSONArray; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/vmware/i18n/utils/MiscUtils.java b/src/main/java/com/vmware/i18n/utils/MiscUtils.java index c75fc59f1..729a93ce9 100644 --- a/src/main/java/com/vmware/i18n/utils/MiscUtils.java +++ b/src/main/java/com/vmware/i18n/utils/MiscUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 VMware, Inc. + * Copyright 2019-2025 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ package com.vmware.i18n.utils; @@ -9,7 +9,7 @@ import java.util.LinkedHashMap; import java.util.Map; -import org.json.simple.JSONObject; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/vmware/i18n/utils/SupplementUtils.java b/src/main/java/com/vmware/i18n/utils/SupplementUtils.java index 2d569af88..9f7519f0c 100644 --- a/src/main/java/com/vmware/i18n/utils/SupplementUtils.java +++ b/src/main/java/com/vmware/i18n/utils/SupplementUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2023 VMware, Inc. + * Copyright 2019-2025 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ package com.vmware.i18n.utils; @@ -7,11 +7,11 @@ import java.io.File; import java.text.MessageFormat; import java.util.LinkedHashMap; -import java.util.LinkedList; +import java.util.List; import java.util.Map; import com.vmware.i18n.common.Constants; -import org.json.simple.JSONObject; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,7 +46,7 @@ public static void supplementalCurrencyExtract() { Map regionMap = (Map) supplementalMap.get(Constants.REGION); Map resMap = new LinkedHashMap(); for (Map.Entry entry : regionMap.entrySet()) { - LinkedList list = (LinkedList) entry.getValue(); + List list = (List) entry.getValue(); for (int i = 0; i < list.size(); i++) { Map itemMap = (Map) list.get(i); for (Map.Entry item : itemMap.entrySet()) { diff --git a/src/main/java/com/vmware/i18n/utils/timezone/CldrTimeZoneUtils.java b/src/main/java/com/vmware/i18n/utils/timezone/CldrTimeZoneUtils.java index 5b6c23ed9..c1145271c 100644 --- a/src/main/java/com/vmware/i18n/utils/timezone/CldrTimeZoneUtils.java +++ b/src/main/java/com/vmware/i18n/utils/timezone/CldrTimeZoneUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 VMware, Inc. + * Copyright 2019-2025 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ package com.vmware.i18n.utils.timezone; @@ -17,8 +17,8 @@ import java.util.TimeZone; import java.util.TreeMap; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; +import org.json.JSONArray; +import org.json.JSONObject; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; @@ -33,10 +33,11 @@ public static Map findTimezoneKeys(JSONObject metaZonesJson) JSONObject timzone = (JSONObject) select(metaZonesJson, "supplemental.metaZones.metazoneInfo.timezone"); Map result = new TreeMap(); if (timzone != null) { - for (Entry entry : (Set>) timzone.entrySet()) { - String zoneKeystr1 = entry.getKey(); - Object obj1 = entry.getValue(); - if (obj1 instanceof List) { + for (String key : (Set) timzone.keySet()) { + // for (Entry entry : (Set>) timzone.entrySet()) { + String zoneKeystr1 = key; + Object obj1 = timzone.get(key); + if (obj1 instanceof JSONArray) { JSONArray objArry = (JSONArray) obj1; JSONObject usesMetazones = (JSONObject) objArry.get(0); JSONObject usesMetazoneObj = (JSONObject) usesMetazones.get(Constants.TIMEZONENAME_USES_METAZONE); @@ -46,10 +47,11 @@ public static Map findTimezoneKeys(JSONObject metaZonesJson) } } JSONObject jsonObj1 = (JSONObject) obj1; - for (Entry entry1 : (Set>) jsonObj1.entrySet()) { - String zoneKeystr2 = entry1.getKey(); - Object obj2 = entry1.getValue(); - if (obj2 instanceof List) { + for (String key1 : (Set) jsonObj1.keySet()) { + // for (Entry entry1 : (Set>) jsonObj1.entrySet()) { + String zoneKeystr2 = key1; + Object obj2 = jsonObj1.get(key1); + if (obj2 instanceof JSONArray) { JSONArray objArry2 = (JSONArray) obj2; JSONObject usesMetazones2 = (JSONObject) objArry2.get(0); JSONObject usesMetazoneObj2 = (JSONObject) usesMetazones2 @@ -61,10 +63,11 @@ public static Map findTimezoneKeys(JSONObject metaZonesJson) } } JSONObject jsonObj2 = (JSONObject) obj2; - for (Entry entry2 : (Set>) jsonObj2.entrySet()) { - String zoneKeystr3 = entry2.getKey(); - Object obj3 = entry2.getValue(); - if (obj3 instanceof List) { + for (String key2 : (Set) jsonObj2.keySet()) { + // for (Entry entry2 : (Set>) jsonObj2.entrySet()) { + String zoneKeystr3 = key2; + Object obj3 = jsonObj2.get(key2); + if (obj3 instanceof JSONArray) { JSONArray objArry3 = (JSONArray) obj3; JSONObject usesMetazones3 = (JSONObject) objArry3.get(0); JSONObject usesMetazoneObj3 = (JSONObject) usesMetazones3 @@ -76,10 +79,11 @@ public static Map findTimezoneKeys(JSONObject metaZonesJson) } } JSONObject jsonObj3 = (JSONObject) obj3; - for (Entry entry3 : (Set>) jsonObj3.entrySet()) { - String zoneKeystr4 = entry3.getKey(); - Object obj4 = entry3.getValue(); - if (obj4 instanceof List) { + for (String key3 : (Set) jsonObj3.keySet()) { + // for (Entry entry3 : (Set>) jsonObj3.entrySet()) { + String zoneKeystr4 = key3; + Object obj4 = jsonObj3.get(key3); + if (obj4 instanceof JSONArray) { JSONArray objArry4 = (JSONArray) obj4; JSONObject usesMetazones4 = (JSONObject) objArry4.get(0); JSONObject usesMetazoneObj4 = (JSONObject) usesMetazones4 @@ -116,9 +120,9 @@ public static String createTimeZoneNameJson(JSONObject metaZonesJson, JSONObject Map timezoneKeysProps = findTimezoneKeys(metaZonesJson); Map> mapZonesMap = new TreeMap>(); if (arry != null) { - Iterator iterator = arry.iterator(); + Iterator iterator = arry.iterator(); while (iterator.hasNext()) { - JSONObject objZone = iterator.next(); + JSONObject objZone = (JSONObject) iterator.next(); String timezoneKey = (String) select(objZone, "mapZone._type"); if (mapZonesMap.get(timezoneKey) != null) { mapZonesMap.get(timezoneKey).add(objZone); @@ -139,10 +143,10 @@ public static String createTimeZoneNameJson(JSONObject metaZonesJson, JSONObject JSONArray mataZoneP = entry.getValue(); cldrMetaZone.put(Constants.TIMEZONENAME_METAZONE_EXEMPLARCITY, exemplarCity); cldrMetaZone.put(Constants.TIMEZONENAME_METAZONE_TIMEZONE, timeZone); - Iterator metaiterator = mataZoneP.iterator(); + Iterator metaiterator = mataZoneP.iterator(); List> usesMetazones = new ArrayList>(); while (metaiterator.hasNext()) { - JSONObject objZone = metaiterator.next(); + JSONObject objZone = (JSONObject) metaiterator.next(); Map usesMetazoneMap = new TreeMap(); String metazoneKey = (String) select(objZone, "usesMetazone._mzone"); String _fromVal = (String) select(objZone, "usesMetazone._from"); diff --git a/src/test/java/com/vmware/test/i18n/I18nUtilTest.java b/src/test/java/com/vmware/test/i18n/I18nUtilTest.java index 3b89fbf8a..44d95def1 100644 --- a/src/test/java/com/vmware/test/i18n/I18nUtilTest.java +++ b/src/test/java/com/vmware/test/i18n/I18nUtilTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 VMware, Inc. + * Copyright 2019-2025 VMware, Inc. * SPDX-License-Identifier: EPL-2.0 */ package com.vmware.test.i18n; @@ -10,8 +10,8 @@ import java.util.LinkedHashMap; import java.util.Map; -import org.json.simple.JSONValue; -import org.json.simple.parser.ParseException; +import org.json.JSONObject; +import org.json.JSONException; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -60,8 +60,11 @@ public void testLocalesExtract() { for(int i=0;i genreJsonObject = null; - genreJsonObject = (Map) JSONValue.parseWithException(regions); - Map territoriesObject = (Map) JSONValue.parseWithException(genreJsonObject.get("territories").toString()); + JSONObject jsonObject = new JSONObject(regions); + genreJsonObject = jsonObject.toMap(); + Map territoriesObject = (Map) genreJsonObject.get("territories"); + // genreJsonObject = (Map) new ObjectMapper().readValue(regions, HashMap.class); + // Map territoriesObject = (Map) new ObjectMapper().readValue(genreJsonObject.get("territories").toString(), HashMap.class); if (languageArray[i].equals("zh")) { Assert.assertEquals("zh", genreJsonObject.get("language")); Assert.assertNotNull(territoriesObject.get("TW")); @@ -101,7 +104,7 @@ public void testLocalesExtract() { } } - } catch (ParseException e) { + } catch (JSONException e) { e.printStackTrace(); } }