mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-04-21 07:16:15 -04:00
feat(new tool): JSON string converter
This commit is contained in:
parent
0b1b98f93e
commit
f536ae79da
5 changed files with 75 additions and 0 deletions
1
components.d.ts
vendored
1
components.d.ts
vendored
|
@ -109,6 +109,7 @@ declare module '@vue/runtime-core' {
|
||||||
Ipv6UlaGenerator: typeof import('./src/tools/ipv6-ula-generator/ipv6-ula-generator.vue')['default']
|
Ipv6UlaGenerator: typeof import('./src/tools/ipv6-ula-generator/ipv6-ula-generator.vue')['default']
|
||||||
JsonDiff: typeof import('./src/tools/json-diff/json-diff.vue')['default']
|
JsonDiff: typeof import('./src/tools/json-diff/json-diff.vue')['default']
|
||||||
JsonMinify: typeof import('./src/tools/json-minify/json-minify.vue')['default']
|
JsonMinify: typeof import('./src/tools/json-minify/json-minify.vue')['default']
|
||||||
|
JsonStringConverter: typeof import('./src/tools/json-string-converter/json-string-converter.vue')['default']
|
||||||
JsonToCsv: typeof import('./src/tools/json-to-csv/json-to-csv.vue')['default']
|
JsonToCsv: typeof import('./src/tools/json-to-csv/json-to-csv.vue')['default']
|
||||||
JsonToToml: typeof import('./src/tools/json-to-toml/json-to-toml.vue')['default']
|
JsonToToml: typeof import('./src/tools/json-to-toml/json-to-toml.vue')['default']
|
||||||
JsonToXml: typeof import('./src/tools/json-to-xml/json-to-xml.vue')['default']
|
JsonToXml: typeof import('./src/tools/json-to-xml/json-to-xml.vue')['default']
|
||||||
|
|
|
@ -333,6 +333,10 @@ tools:
|
||||||
title: JSON minify
|
title: JSON minify
|
||||||
description: Minify and compress your JSON by removing unnecessary whitespace.
|
description: Minify and compress your JSON by removing unnecessary whitespace.
|
||||||
|
|
||||||
|
json-string-converter:
|
||||||
|
title: JSON string converter
|
||||||
|
description: Convert your plain text or JavaScript objects into JSON string format and vice versa.
|
||||||
|
|
||||||
ulid-generator:
|
ulid-generator:
|
||||||
title: ULID generator
|
title: ULID generator
|
||||||
description: Generate random Universally Unique Lexicographically Sortable Identifier (ULID).
|
description: Generate random Universally Unique Lexicographically Sortable Identifier (ULID).
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { tool as base64FileConverter } from './base64-file-converter';
|
import { tool as base64FileConverter } from './base64-file-converter';
|
||||||
import { tool as base64StringConverter } from './base64-string-converter';
|
import { tool as base64StringConverter } from './base64-string-converter';
|
||||||
import { tool as basicAuthGenerator } from './basic-auth-generator';
|
import { tool as basicAuthGenerator } from './basic-auth-generator';
|
||||||
|
import { tool as jsonStringConverter } from './json-string-converter';
|
||||||
import { tool as emailNormalizer } from './email-normalizer';
|
import { tool as emailNormalizer } from './email-normalizer';
|
||||||
|
|
||||||
import { tool as asciiTextDrawer } from './ascii-text-drawer';
|
import { tool as asciiTextDrawer } from './ascii-text-drawer';
|
||||||
|
@ -106,6 +107,7 @@ export const toolsByCategory: ToolCategory[] = [
|
||||||
textToNatoAlphabet,
|
textToNatoAlphabet,
|
||||||
textToBinary,
|
textToBinary,
|
||||||
textToUnicode,
|
textToUnicode,
|
||||||
|
jsonStringConverter,
|
||||||
yamlToJson,
|
yamlToJson,
|
||||||
yamlToToml,
|
yamlToToml,
|
||||||
jsonToYaml,
|
jsonToYaml,
|
||||||
|
|
12
src/tools/json-string-converter/index.ts
Normal file
12
src/tools/json-string-converter/index.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import { IconBraces } from '@tabler/icons-vue';
|
||||||
|
import { defineTool } from '../tool';
|
||||||
|
|
||||||
|
export const tool = defineTool({
|
||||||
|
name: 'Json string converter',
|
||||||
|
path: '/json-string-converter',
|
||||||
|
description: '',
|
||||||
|
keywords: ['json', 'string', 'converter'],
|
||||||
|
component: () => import('./json-string-converter.vue'),
|
||||||
|
icon: IconBraces,
|
||||||
|
createdAt: new Date('2024-10-17'),
|
||||||
|
});
|
56
src/tools/json-string-converter/json-string-converter.vue
Normal file
56
src/tools/json-string-converter/json-string-converter.vue
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { UseValidationRule } from '@/composable/validation';
|
||||||
|
import { withDefaultOnError } from '@/utils/defaults';
|
||||||
|
|
||||||
|
const defaultValue = '{\n\t"hello": [\n\t\t"world"\n\t]\n}';
|
||||||
|
|
||||||
|
// Define a reactive variable to track the selected transformation mode
|
||||||
|
const selectedMode = ref('stringify');
|
||||||
|
|
||||||
|
// Create functions for both stringification and parsing
|
||||||
|
const stringifyTransformer = (value: string) => withDefaultOnError(() => JSON.stringify(value), '');
|
||||||
|
const parseTransformer = (value: string) => withDefaultOnError(() => JSON.parse(value).toString(), '');
|
||||||
|
|
||||||
|
// Dynamically select the transformer based on the selected mode
|
||||||
|
const transformer = computed(() => {
|
||||||
|
if (selectedMode.value === 'stringify') {
|
||||||
|
return stringifyTransformer;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return parseTransformer;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const rules: UseValidationRule<string>[] = [
|
||||||
|
{
|
||||||
|
validator: (v: string) => v === '' || (selectedMode.value === 'stringify' ? JSON.stringify(v) : JSON.parse(v)),
|
||||||
|
message: 'Provided text is not valid. (Make sure your JSON is in double quotes)',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// Dropdown options
|
||||||
|
const dropdownOptions = computed(() => [
|
||||||
|
{ label: 'JSON Stringify', value: 'stringify' },
|
||||||
|
{ label: 'JSON Parse', value: 'parse' },
|
||||||
|
]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<c-card>
|
||||||
|
<c-select
|
||||||
|
v-model:value="selectedMode"
|
||||||
|
label="Transformation Mode"
|
||||||
|
:options="dropdownOptions"
|
||||||
|
/>
|
||||||
|
</c-card>
|
||||||
|
<div />
|
||||||
|
<format-transformer
|
||||||
|
input-label="Your text / JSON string"
|
||||||
|
:input-default="defaultValue"
|
||||||
|
input-placeholder="Paste your text here..."
|
||||||
|
output-label="JSON string conversion of your input"
|
||||||
|
output-language="string"
|
||||||
|
:input-validation-rules="rules"
|
||||||
|
:transformer="transformer"
|
||||||
|
/>
|
||||||
|
</template>
|
Loading…
Add table
Add a link
Reference in a new issue